2011-12-17 13 views
6

再帰ツリー構造を格納する必要があります。リンクされたリスト。
したがって、すべてのオブジェクトは同じです。それぞれは親オブジェクトへのポインタを持ち、それぞれは子オブジェクトの配列を持っています。
このような構造体をMongoに格納することはできますか?
つまり、親オブジェクトのMongoコレクション。各オブジェクトは、その中に子オブジェクトのMongoコレクションを保持します。MongoDBコレクションに別のコレクションを含めることはできますか?

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

答えて

3

コレクションをコレクションに格納することはできません。しかし、オブジェクトを参照するIDを他のコレクションに格納することができます。 idをドキュメントまたは要素に解決しなければならない場合は、その要素にさらにIDが格納されている場合は、それらのIDとIDを解決する必要があります。文書は豊富で、データを複製することを意図しているが、ドキュメントには、彼らが代わりに埋め込むあなただけの

5

MongoDBのサブ文書を保存することができますIDを使用することができることを説明します:

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

しかし、私が使用することをお勧めしません。木構造のサブ文書、またはそれほど複雑なもの。サブ文書は一級市民ではありません。彼らはコレクションアイテムではありません。

たとえば、指定した値のノードをすばやく見つけることができるとします。 valueのインデックスを使用すると、その参照は高速になります。ただし、値がサブ文書にある場合、値はコレクション要素の値ではないため索引付けされません。

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

あなたはそれぞれの要素のIDを取得するために、手動でシリアライズのいくつかを行う必要があるでしょう:

したがって、それは手動でシリアライズを行うと、代わりにidのリストを格納する方が良いでしょう。

ヒント ツリーの枝全体をフェッチしたいとします。代わりに、唯一の直接の親IDを格納し、あなたはすべてのの祖先ではなく、IDS を保存することができます:

"ancestorIds": [id1, id2, id3]

関連する問題