【发布时间】:2021-02-01 04:56:27
【问题描述】:
这是我的 mongo 架构:
{
"_id": ObjectId("5f8af2fc5f23667adf3bbaf2"),
"score": 2.5,
"questions": [{
"_id": ObjectId("5f8af30d5f23667adf3bbaf5"),
"desc": "some text",
},
{
"_id": ObjectId("5f8af3115f23667adf3bbaf8"),
"desc": "some text",
"options": [{
"_id": ObjectId("5f8af3115f23667adf3bbaf9"),
"name": "some name",
"desc": "description 1"
},
{
"_id": ObjectId("5f8af3115f23667adf3bbafa"),
"name": "some name",
"desc": "description 2"
}
]
}
]
}
我必须更新 ID 为 5f8af3115f23667adf3bbaf9 的 option 的名称和描述,它位于 array 元素 之一中id 为 5f8af30d5f23667adf3bbaf5 的 question 属性又是 id 为 5f8af2fc5f23667adf3bbaf2
的数据的一部分尝试了以下查询,该查询已成功执行但未更新选项:
Model.findOneAndUpdate({
_id : ObjectId("5f8af2fc5f23667adf3bbaf2"),
"questions._id": ObjectId("5f8af30d5f23667adf3bbaf5"),
"questions.options._id": ObjectId("5f8af3115f23667adf3bbaf9"),
}, {
$set: {
"questions.$[q].options.$[o].order": data.order,
"questions.$[q].options.$[o].definition": data.definition,
"questions.$[q].options.$[o].type": data.type,
},
},
{
arrayFilters: [{ "q._id": ObjectId(qid) }, { "o._id": ObjectId(oid) }]
})
是否可以在单个 mongoose findOneAndUpdate 方法中完成?
【问题讨论】:
-
我认为它没有更新,因为查询没有找到任何要更新的内容,因为您在问题下搜索 "_id": ObjectId("5f8af30d5f23667adf3bbaf5") 并且它没有选项数组。换个 id 试试
-
仅供参考...当我尝试将 5f8af3115f23667adf3bbaf8 作为问题 ID 时,结果也相同
标签: node.js mongodb express mongoose mongodb-query