在MongoDB中更新数组中的对象元素

时间:2017-09-11 15:04:48

标签: mongodb mongodb-query mean-stack

我已经在Stackoverflow上阅读了其他一些帖子,但没有找到任何“一般”答案。

假设我有一个结构,就像这样:

{
    personsName: "Bob",
    children: [
       {childsName: "Alice", age: "9", weight: "40"}
       {childsName: "Peter", age: "12", weight: "80"} 
    ]
}

现在我想编辑Peters重量,因为它实际上是“45”

我试过了:

  .update(
     { personsName: "Bob", children.childsName: "Peter"},
     {
       $set: {children: {weight :"45" } }
     }
   )

对我而言,这应该是有效的...将所有名为“Peter”且属于“Bob”的孩子的孩子体重更新为“45”...... 我看到了一些解决方案,他们通过索引更新数组,但我们假设我们不知道索引,我们想通过childs属性“childsName”更新。

这样做的一般方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您确定Bob不超过1个Peter,您可以使用positional operator,如下所示:

.update(
  { personsName: "Bob", "children.childsName": "Peter"},
  {
    $set: {"children.$.weight" :"45" } 
  }
)

请注意,操作员仅更新第一个匹配的子文档,并且仅更新为1级。