【问题标题】:Mongoose Nested Arrays, Trees and Embedded DocsMongoose 嵌套数组、树和嵌入式文档
【发布时间】: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


    【解决方案1】:

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

    就是这样实现的:http://docs.mongodb.org/manual/tutorial/model-tree-structures-with-ancestors-array/

    如果您需要一些说明,请随时询问。

    【讨论】:

    • 嘿,您的祖先树还在使用当前的 mongoose 版本吗?用法是否记录在某处?谢谢! @马吕斯
    • 好久没更新了。所以很有可能它不起作用,半年多没有使用任何与mongo相关的东西。找出答案的最简单方法是尝试
    猜你喜欢
    • 2016-10-06
    • 2016-04-25
    • 2012-04-16
    • 2012-06-23
    • 1970-01-01
    • 2011-12-21
    • 2017-06-22
    • 2012-06-08
    • 2018-07-24
    相关资源
    最近更新 更多