2013-04-18 64 views
0

所以我需要一些建議,以我不正確的做法。我是否正確使用這個mongoDB的索引?

我的數據庫設置完全像由foldersfiles組成的文件系統。 它以一個文件夾開頭,但可以有相對無限數量的子文件夾和/或文件。

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

每個文件夾/文件文檔都有一個uniqueID,以便我可以引用它(見上面的zzz#)。我的問題是,我可以讓一個mongoDB查詢只提取一個文檔嗎?

像比方說db.fileSystemCollection.find({"uniqueID":"zzz4"})和它會給我以下結果?我必須使用索引來做到這一點嗎?我一直在嘗試,但查詢每次都會返回空。

預期的結果---> { 「名稱」: 「subfolder2」, 「子內容」:[...等...], 「UNIQUEID」: 「zzz4」}

[編輯] 根據下面的回答,我會考慮使用mongoDB上的XML數據庫。 json結構不能被重新安排來與MongoDB一起工作(太多的數據)。

回答

1

否;搜索{uniqueID: "zzz4"}只會獲得頂級uniqueID匹配的文檔。

你可能想要的是保持在其中列有該樹中所有的唯一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}) 

這會回到你的那些文件。

順便說一句,如果你想存儲在蒙戈文件,有你看着GridFS

+0

嗨克里斯,將與此實施工作說id zzz900?假設它被包含在...的子項的一個孩子中......子文件夾2的一個孩子在上面的例子中?所以我所要做的就是在idList的根級維護唯一的ID,它可以找到它們? –

+0

這是正確的。 –

+0

好的。所以我只是測試它。它找到了文檔,但它返回了整個根文檔和所有內容。是否沒有辦法返回包含uniqueID的單個行? –

3

簡短的回答是否定的,正如Chris所說的。

樹的嵌入式表示對於直觀理解(以及實現)非常有用。但是,如果您想在MongoDB中使用索引在樹上進行有效的搜索,則可以考慮樹存儲的另一種方法。方式一幫被列在http://docs.mongodb.org/manual/tutorial/model-tree-structures/

請記住,每個代表都有自己的優點,並根據您的訪問模式的利弊。

由於對文件系統狀結構,它很可能必須找到一個給定文件夾的所有子內容的能力,你可以使用子引用模式本:

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

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

... 
+0

+1作爲實現的鏈接。我會仔細觀察他們,看看這項工作的正確性。我的限制雖然是我不能改變數據的結構。 json文件已經按原樣提供了,並且很難修改那些json文件。 –

相關問題