$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 到多个嵌套数组两个深的主要内容,如果未能解决你的问题,请参考以下文章

JS 数组的 push 与 concat 区别

FCC 中级算法题 数组扁平化

js对象深拷贝

Javascript .push 导致数组嵌套越来越深[重复]

对象和数组的 ECMAScript5 深拷贝

js实现对象或者数组深拷贝