【问题标题】:$push to multiple nested array two deep$push 到多个嵌套数组两个深
【发布时间】: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 我刚刚更新了,抱歉。

标签: node.js mongodb mongoose


【解决方案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(); 我是从这个 [stackoverflow.com/questions/17899750/… 帖子中得到的。
猜你喜欢
  • 2021-04-17
  • 2017-08-24
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2018-10-30
相关资源
最近更新 更多