使用Mongo查询按ID更新数组元素

15

有没有一种查询方式可以将_id为1的数组元素中id为2的sc更新从15到17?我在MongoDB中有以下结构:

  { _id: 1,
    lb: [
       {
          id: 2,
          sc: 15
       },
       {
          id: 3,
          sc: 16
       }
        ]
  }
  { _id: 2,
    lb: [
       {
          id: 5,
          sc: 34
       },
       {
          id: 6,
          sc: 12
       }
        ]
  }

我还有一个问题:是否有一种方法可以编写查询来更新你刚才说的内容,如果没有具有更新id的数组元素,则插入一个新数组元素。我不想进行两个查询——第一个查询用于检查元素是否存在并更新它,第二个查询用于在没有这样的元素时追加它。希望能够在一个查询中追加它。谢谢。


你的例子中不是元素ID为1吗?对于数组的第一个元素,sc为15。 - Pierre Arlaud
是的,我希望它是17。 - boneash
你应该将你的问题示例泛化。 - Ricky Boyce
1个回答

38

您可以使用以下查询来更新它:

db.myCollection.update({"_id" : 1, "lb.id" : 2},{$set : {"lb.$.sc" : 17}})

据我所知,在一个查询中无法完成你想要的操作。你必须为每个查询单独进行查询。


不用谢。我已经更新了关于你第二个问题的答案。如果它起作用了,你可以将其标记为答案。 - Parvin Gasimzade
我尝试了这个,得到了“在'$set'中以美元符号($)为前缀的字段'$set'对于存储无效。”-- 我正在使用golang+mongo。 - ruralcoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接