2014-01-10 154 views
2

我有一個貓鼬的模式是這樣的:貓鼬嵌套數組,樹和嵌入式文件

Schema: Item 
Schema: SubItem 
Schema: SubItemTwo 

//Item Schema looks like this: 
Item: { 
    SubItem: [SubItemSchema] 
} 

SubItemSchema looks like this: 
{ 
    field1: String, 
    field2: String, 
    OtherItems: [SubItemTwoSchema] 
} 

SubItemTwoSchema是一些字符串字段的扁平架構。

基本上我發現使用查詢,$ set,$ inc和$ addToSet等操作符來處理SubItemSchema.OtherItems幾乎是不可能的。 我不相信貓鼬方法是有效的,因爲我必須基本保存()和保存()即Item.SubItem [0] .OtherItems.push(東西)

Mongoose只支持一個嵌入式文檔數組,並且用於一個數組中的數組 - 對第二級數組來說變得不可能做得太多。

所以我的問題是人們用什麼方法來處理這種類型的數據模型,即一個具有子數組的數組對象。我注意到關於樹結構的文檔http://docs.mongodb.org/manual/tutorial/model-tree-structures/,但我還沒有看到如何在不使用貓鼬的推送方法的情況下建模2層嵌套數組的任何實現。有關建模樹結構的MongoDb文檔需要添加字段以引用父代和祖先,但這看起來過於誇張,因爲我的樹只有3層深。

所以我應該: 1.使用文件陣列 2.破除貓鼬和使用不屬於陣列中的嵌入文檔 3.重新建模我的數據,讓我不要有一個數組中的數組?

如果選項3是答案,您會如何建議重新構建模式,以便SubItemTwo文檔可以是SubItem文檔的子項,並且SubItem文檔可以是父項的子項。

謝謝

回答

2

我解決了它通過實施與兒童父母數組模式。爲我工作嗎?下面是實現作爲一個模塊:https://github.com/mariuskubilius/lbg-mongoose-utils/blob/master/lib/ancestorTree.js

它使用這種方式實現:http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-ancestors-array/

如果你需要一些澄清,不要猶豫,問。

+0

嘿,你的祖先樹還在使用當前的貓鼬版本嗎?用法記錄在某處嗎?謝謝! @Marius –

+0

我有一段時間沒有更新它。所以有很大的可能性,它不會工作,沒有使用任何有關半年以上的mongo。找出最簡單的方法是簡單嘗試 – Marius