【问题标题】:MongoDB: updating 2 arrays in the same documentMongoDB:更新同一文档中的 2 个数组
【发布时间】:2022-01-04 18:12:02
【问题描述】:

用户:

{
_id: "userID",
array_1:[],
array_2:[]
}

我需要对此文档进行两次更新:

  1. array_1 包含具有唯一 id 属性的对象。我需要找到id=targetID 的位置并将其替换为newObject,如下所示:
User.updateOne(
    {
      _id: userID, 
      "array_1.id": targetID
    }, 
     {
       "$set":{"array_1.$":newObject}
     }
  )
  1. array_2 包含对象,其中多个对象可以具有相同的 id 值。我需要更新 array_2 中所有对象的 2 个属性,其中 id=targetID,如下所示:
User.updateOne(
  { 
    _id: userID, 
    "array_2.id": targetID
  },
  { 
    "$set": { 
              "array_2.$[elem].property_1": new_property_1, 
              "array_2.$[elem].property_2": new_property_2 
            } 
  },
  { 
    "arrayFilters": [{ "elem.id": targetID }], 
    "multi": true 
  }
  )

如果我单独运行这两个可以正常工作,但我如何将两者结合到一个函数中?

【问题讨论】:

    标签: javascript mongodb mongoose mongodb-query


    【解决方案1】:

    您可以使用 arrayFilters 组合它,就像您在第二个查询中所做的一样,

    • 创建一个过滤器属性arr1 并使用它来更新对象,
    await User.updateOne(
      { _id: userID },
      {
        $set: {
          "array_1.$[arr1]": newObject,
          "array_2.$[elem].property_1": new_property_1,
          "array_2.$[elem].property_2": new_property_2
        }
      },
      {
        arrayFilters: [
          { "elem.id": targetID },
          { "arr1._id": targetID }
        ]
      }
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2022-12-05
      • 2016-12-31
      • 2015-04-29
      • 1970-01-01
      • 2018-12-08
      • 2021-07-20
      相关资源
      最近更新 更多