因此,我需要一些有关我做错事情的建议。

我的数据库的建立就像一个由foldersfiles组成的文件系统一样。 它以文件夹开头,但是可以具有相对无限数量的子文件夹和/或文件。

{
   "name":"folder1",
   "uniqueID":"zzz0",
   "subcontents": [ {"name":"subfolder1", "uniqueID":"zzz1"}, 
                    {"name":"subfile1", "uniqueID":"zzz2"}, 
                    {"name":"subfile2", "uniqueID":"zzz3"}, 
                    {"name":"subfolder2", "subcontents": [...etc...], "uniqueID":"zzz4"}, 
                  ] 
}

每个文件夹/文件文档都有一个唯一的ID,以便我可以引用它(如上zzz#所示)。 我的问题是,我可以进行mongoDB查询以仅提取单个文档吗?

像说db.fileSystemCollection.find({"uniqueID":"zzz4"}) ,它会给我以下结果吗? 我必须使用索引来做到这一点吗? 我一直在尝试,但是查询每次都返回空。

预期的结果---> {“ name”:“ subfolder2”,“ subcontents”:[... etc ...],“ uniqueID”:“ zzz4”}

[编辑]根据以下响应,我将考虑在mongoDB上使用XML数据库。 json结构不能重新排列以与MongoDB一起使用(数据过多)。

===============>>#1 票数:3

克里斯说过,简短的回答是否定的。

您对树的嵌入式表示非常有助于直观理解(以及实现)。 但是,如果要允许使用MongoDB中的索引对树进行有效搜索,则可以考虑使用其他方法来存储树。 http://docs.mongodb.org/manual/tutorial/model-tree-structures/中列出了很多方法

请记住,每种表示形式都有其优缺点,具体取决于您的访问方式。

由于对于类似文件系统的结构,它很可能能够找到给定文件夹的所有子内容,因此您可以使用子引用模式:

{
   "name":"folder1",
   "uniqueID":"zzz0",
   "subcontents": [ "zzz1", 
                    "zzz2", 
                    "zzz3", 
                    "zzz4" 
                  ] 
}

{
  "name":"subfolder1", 
  "uniqueID":"zzz1"
}

...

===============>>#2 票数:1 已采纳

没有; 搜索{uniqueID: "zzz4"}只会得到顶级唯一{uniqueID: "zzz4"}匹配的文档。

您可能想要的是在文档上维护一个数组,该数组列出该树中的所有唯一ID。 因此,您的文档将是:

{
   "name":"folder1",
   "uniqueID":"zzz0",
   "idList": ["zzz0", "zzz1", "zzz2", "zzz3", "zzz4"],
   "subcontents": [ {"name":"subfolder1", "uniqueID":"zzz1"},
                    {"name":"subfile1", "uniqueID":"zzz2"},
                    {"name":"subfile2", "uniqueID":"zzz3"},
                    {"name":"subfolder2", "subcontents": [...etc...], "uniqueID":"zzz4"},
                  ]
}

然后,您可以为该索引:

db.fileSystemCollection.ensureIndex({"idList": 1})

然后您可以找到它:

db.fileSystemCollection.find({"idList": "zzz4})

那将退还那些文件。

顺便说一句 ,如果您尝试将文件存储在Mongo中,您是否看过GridFS

  ask by iOS Calendar patchthecode.com translate from so

未解决问题?本站智能推荐: