NodeJS Mongoose,更新数组中对象内部的数组值

f0brbegy  于 2023-02-03  发布在  Node.js
关注(0)|答案(1)|浏览(172)

如何更新数组中对象内部的数组值。

{
    "_id" : ObjectId("63c7ca9584535c160ee4aaed"),
    "status" : "REJECTED",
    "steps" : [
        {
            "_id" : ObjectId("63c7ca9884535c160ee4ab03"),
            "status" : "REJECTED",
            "stepUsers" : [
                {
                    "_id" : ObjectId("63c7ca9884535c160ee4ab04"),
                    "status" : "REJECTED",
                }
            ]
        },
    ]
}

我尝试使用arrayFilters更新,但没有成功。Mongo抛出错误MongoServerError: Found multiple array filters with the same top-level field name steps

Collection.updateOne({
                            _id: id
                        }, {
                            $set: {
                                "steps.$[steps].stepUsers.$[stepUsers].status": 'PENDING',
                            }
                        }, {
                            arrayFilters: [
                                { "steps._id": step._id },
                                { "steps.stepUsers._id": stepUser._id }
                            ]
                        })

我需要更新集合中的steps.stepUsers.status

mznpcxlj

mznpcxlj1#

尝试更改数组筛选器:"steps.stepUsers._id"-〉"stepUsers._id"
因为arrayFilters引用的是[]中的字符串,而不是它的路径。

Collection.updateOne({
  _id: id
},
{
  $set: {
    "steps.$[steps].stepUsers.$[stepUsers].status": "PENDING",
    
  }
},
{
  arrayFilters: [
    {
      "steps._id": step._id
    },
    {
      "stepUsers._id": stepUser._id
    }
  ]
})

了解它在playground example上的工作原理

相关问题