2013-08-23 249 views
0

所以我們假設我正在創建一個帶有部分的列表。跟蹤父母的孩子,或跟蹤孩子的父母?

是否最好將ArrayObjectId保留在父元素中。

var listSchema = new mongoose.Schema({ 
    sections : {type: [ObjectId], ref : "Section"} 
}); 

還是我只是不停地給母公司ObjectId中的每一項參考,並簡單地找到

var sectionSchema = new mongoose.Schema({ 
    list : {type: ObjectId, ref : "List"} 
}); 

(或兩者最大的靈活性?)

我一直在做第二方式,但我想我可能會陷入關係數據庫範例。因爲一旦有多層次的嵌套,它就會變得非常髒,所有的回調都會得到我想要的數據。我真的不能利用填充函數。

+0

這個基本問題已經在StackOverflow和其他地方都被覆蓋了很多。 10gen已經記錄了各種選項的優點和缺點,這已經很常見了:http://docs.mongodb.org/manual/tutorial/model-tree-structures/ – WiredPrairie

+0

http://stackoverflow.com/search?q=tree +結構+ mongodb – WiredPrairie

+0

謝謝,我來看看。 –

回答

1

假設每個對象只有一個父對象,那麼在父對象中保留父對象更容易。

儘管如果您總是試圖找到對象的子對象而不是父對象,那麼在父對象中存儲一組子對象會更容易。

我不確定您正在使用的語言是否可以使用地圖,但是您可以使用地圖將父ID與兒童ID鏈接。它通過存儲父ID作爲關鍵字,並將子ID作爲值進行工作。這樣,您只需查找父ID並獲取其所有值,或查找子ID並獲取其父母即可。

這意味着ID不會存儲在子項或父項中,而是存儲在他們都需要訪問的單獨數據結構中。

此外,常規地圖可能只允許每個鍵一個值。如果是這種情況,你需要一個MultiMap。在互聯網上可能有一些關於如何使用它以及如何訪問課程的信息。

+0

我不確定爲什麼你在評論你甚至不知道這項技術? – WiredPrairie