2011-12-17 562 views
6

我需要存儲一個遞歸樹結構。一個鏈表。
所以所有的對象都是一樣的。每個對象都有一個指向父對象的指針,每個對象都有一個子對象數組。
我可以在Mongo中存儲這樣的結構嗎?
即一個Mongo的父對象集合,每個對象都包含一個Mongo子對象集合。MongoDB集合可以在其中有另一個集合嗎?

$a = $MyCollection->findOne(**some conditions)->Childs->find(...) 

回答

3

您不能在集合中存儲集合。但是您可以存儲引用其他集合中的對象的id。您必須將id解析爲文檔或元素,然後如果該元素存儲更多的id,您需要先解決這些id。文件是爲了豐富和重複的數據,但在文檔他們解釋,而不是嵌入你可以只使用IDS

5

MongoDB的可存儲子文檔:

Node 
{ 
    "value" : "root" 
    "children" : [ { "value" : "child1", "children" : [ ... ] }, 
        { "value" : "child2", "children" : [ ... ] } ] 
} 

不過,我不建議使用樹結構的子文檔或任何相當複雜的東西。子文件不是一級公民;他們不是收集物品。

例如,假設您希望能夠快速找到具有給定值的節點。通過value上的索引,該查找會很快。但是,如果該值位於子文檔中,則它不會被索引,因爲它不是集合元素的值。

因此,它通常是更好地做手工序列化和存儲ID的列表,而不是:

Node 
{ 
    "_id" : ObjectId("..."), 
    "parentId" : ObjectId("..."), // or null, for root 
} 

你必須手動做一些序列化來獲取相應的元素的IDS。

提示 假設您想獲取樹的整個分支。相反,僅存儲直接父ID,可以存儲所有祖先ID,而不是:

"ancestorIds": [id1, id2, id3]

相關問題