$push 到多个嵌套数组两个深
Posted
技术标签:
【中文标题】$push 到多个嵌套数组两个深【英文标题】:$push to multiple nested array two deep 【发布时间】:2020-10-22 10:05:00 【问题描述】:这是我当前收藏的样子:
Object: foods,
Group:
Name: fruit
Kinds:
Name: Apple,
Details:
Name: Honey Crisp,
Color: red,
Taste: sweet
Name: Meat
Kinds:
Name: Pork,
Details:
Name: Pork Chop,
Color: red,
Taste: sweet
Name: Bacon,
Color: red,
Taste: salty
所以我想在详细信息文档中添加另一种类型的苹果。我见过人们使用 $push 将文档添加到一层,但我还没有看到任何关于如何添加超过一层的文档的教程。请帮忙。
编辑 我想在不使用索引的情况下将其添加到 apple 的详细信息下。
Name: Red Delicious,
Color: red,
Taste: Sweet
【问题讨论】:
该文档的格式不太有效。Details
应该是一个数组吗?
@Joe 是的。它应该是一个对象数组
@Joe 我希望能够添加多种类型、详细信息和组
编辑问题以指明文档现在的样子,以及您希望它在一切完成后的样子。这样我们就可以更好地了解该做什么。
@Joe 我刚刚更新了,抱歉。
【参考方案1】:
这在很多层面上都是错误的,请下次使用[]作为数组,在字段之间使用,
。
您的问题的答案是arrayFilters。有了它们,您可以施展魔法,您正在寻找。
【讨论】:
这行得通,但推送时不会生成 id。你能帮我解决这个问题吗? 它永远不会生成 id,这是我建议您的第二件事 -> 如果您想使用它,请在阵列的每一层上生成 id。如果它只是简单的数组,你不必这样做,但如果你使用对象,你应该生成 id。就像你有组一样,id 应该是“id”或更好地理解“groupId”。您可以使用 ObjectId()[docs.mongodb.com/manual/reference/method/ObjectId/] 函数生成 id。我不确定它如何与 mongoose 一起使用,我正在使用本地 mongo 驱动程序。 这应该对你有帮助var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId();
我是从这个 [***.com/questions/17899750/… 帖子中得到的。以上是关于$push 到多个嵌套数组两个深的主要内容,如果未能解决你的问题,请参考以下文章