mongoose嵌套数组,树木和embedded式文档

我有一个像这样的mongoose模式:

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是一些string字段的平面模式。

基本上我发现使用查询,$ set,$ inc和$ addToSet等操作符来处理SubItemSchema.OtherItems几乎是不可能的。我不相信mongoose的方法是有效的,因为我必须保存整个“Items”实例将子数组标记为已修改,即Mongoose push()和save(),即Item.SubItem [0] .OtherItems.push(thing)

Mongoose只支持一个embedded式文档数组和一个数组中的数组 – 对于第二个级别的数组来说变得不可能。

所以我的问题是人们使用什么方法来处理这种types的数据模型,即一个数组有一个子数组的对象。 我注意到关于树结构的http://docs.mongodb.org/manual/tutorial/model-tree-structures/上的文档,但是我还没有看到如何在不使用mongoose的push方法的情况下build模一个2级嵌套数组的实现。 关于build模树结构的MongoDb文件需要添加字段来引用父母和祖先,但是这似乎过分,因为我的树只有3层深。

所以我应该:1.使用文档数组2.去除mongoose和使用不在数组中的embedded式文档3.重新build模我的数据,以便我没有数组中的数组?

如果选项3是答案,您将如何build议重新模式化模式,以便SubItemTwo文档可以是SubItem文档的子项,并且SubItem文档可以是父项的子项。

谢谢

我通过与包含在儿童中的父母的数组实现模式来解决这个问题。 为我工作吗? 这是作为一个模块的实现: https : //github.com/mariuskubilius/lbg-mongoose-utils/blob/master/lib/ancestorTree.js

它使用这种方式实现: http : //docs.mongodb.org/manual/tutorial/model-tree-structures-with-ancestors-array/

如果你需要一些澄清,不要犹豫,问。