【发布时间】:2014-01-29 12:48:16
【问题描述】:
我有一个像这样的猫鼬模式:
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 几乎是不可能的。 我不相信猫鼬方法是有效的,因为在将子数组标记为已修改后,我基本上必须保存整个“项目”实例 即 Mongoose push() 和 save() 即 Item.SubItem[0].OtherItems.push(thing)
Mongoose 仅支持嵌入文档数组和数组中的数组 - 使用二级数组做很多事情变得不可能。
所以我的问题是人们使用什么方法来处理这种类型的数据模型,即一个具有子数组的数组的对象。我注意到http://docs.mongodb.org/manual/tutorial/model-tree-structures/ 上关于树结构的文档,但我还没有看到如何在不使用 mongoose 的推送方法的情况下对 2 级嵌套数组进行建模的任何实现。关于树结构建模的 MongoDb 文档需要添加字段来引用父母和祖先,但这似乎有点过头了,因为我的树只有 3 层深。
我也应该: 1. 使用文档数组 2. 取消 mongoose 并使用不在数组中的嵌入文档 3. 重新建模我的数据,使数组中没有数组?
如果选项 3 是答案,您建议如何重新修改架构,以便 SubItemTwo 文档可以是 SubItem 文档的子项,而 SubItem 文档可以是父项的子项。
谢谢
【问题讨论】:
标签: node.js mongodb nested mongoose