【问题标题】:MongoDB updating array of objects does not work as expectedMongoDB 更新对象数组无法按预期工作
【发布时间】:2021-11-28 04:30:22
【问题描述】:

在一个 db 中有多个文档,其中一个如下所示:

{
   "searchWord":[
      "pizz",
      "pizza"
   ],
   "result":[
      {
         "idMeal":1,
         "strMeal":"test1",
         "strInstructions":"test1"
      },
      {
         "idMeal":2,
         "strMeal":"test2",
         "strInstructions":"test2"
      }
   ]
}

试图像这样解决它:

例如:

 db.meals.updateOne(
    {
      "searchWord": "pizz",
      "result": { $elemMatch: { idMeal: "1"  } }
    },
    { $set: { 'result.$.strMeal' : "UPDATED" } }
 )

这不会像我写的那样只更新第二个相应的子文档

{ $set: { 'result.1.strMeal' : "更新" } }

(这将导致第二个子文档被更新)

这是另一个想法(相同的结果)

db.meals.updateOne(
  { searchWord: "pizz", 'result.idMeal': 319012 },
  { $set: { "result.$.strMeal" : "fsdf" } }
)

我似乎不明白的是它正是 mongo 提供的语法,但它不起作用

“$”运算符没有选择我要更新的对象数组

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    尝试在您的$set 中使用$[] 用于多个位置元素

    db.collection.update({
      "searchWord": "pizz"
    },
    {
      $set: {
        "result.$[r].strMeal": "UPDATED"
      }
    },
    {
      arrayFilters: [
        {
          "r.idMeal": 1
        }
      ]
    })
    

    这里是Mongo playground 供您参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2022-06-13
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多