gpt4 book ai didi

node.js - Mongoose 嵌套数组、树和嵌入式文档

转载 作者:可可西里 更新时间:2023-11-01 10:32:02 26 4
gpt4 key购买 nike

我有一个像这样的 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 是一些字符串字段的平面模式。

基本上,我发现使用查询、$set、$inc 和 $addToSet 运算符等来处理 SubItemSchema.OtherItems 几乎是不可能的。我不相信 Mongoose 方法是有效的,因为我必须在将子数组标记为已修改后基本上保存整个“Items”实例即 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 文档可以是父项的子项。

谢谢

最佳答案

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

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

如果您需要一些说明,请随时提出。

关于node.js - Mongoose 嵌套数组、树和嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com