如何根据查询更新子文档数组中的子文档字段?
How can I update the sub document field from the sub document array based on the query?
{
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
{
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": false
},
{
"bookid": ObjectId("552cd77e31456e192df6ad8a"),
"isActive": true
}
]
}
我需要更新上面的文档,条件是 source.bookid
是 ObjectId("552cd77e31456e192df6ad8e")
,并将特定文档字段 isActive
更新为 false
。因此,我需要的结果输出为
{
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
{
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": false
},
{
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": true
}
]
}
谁能告诉我,如何执行这个更新查询?并且还可以检索子文档数组包含所有 "isActive" 的所有文档为 false?
使用mongo update documentation进行嵌套键更新使用$elemMatch
查询如下
db.collectionName.update({"source":{"$elemMatch":{"bookid":ObjectId("552cd77e31456e192df6ad8e")}}},{"$set":{"source.$.isActive":false}})
如果多个文件更新然后使用这个mongo update add multi true.
{
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
{
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": false
},
{
"bookid": ObjectId("552cd77e31456e192df6ad8a"),
"isActive": true
}
]
}
我需要更新上面的文档,条件是 source.bookid
是 ObjectId("552cd77e31456e192df6ad8e")
,并将特定文档字段 isActive
更新为 false
。因此,我需要的结果输出为
{
"_id": ObjectId("552cd780e4b042752e540df5"),
"source": [
{
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": false
},
{
"bookid": ObjectId("552cd77e31456e192df6ad8e"),
"isActive": true
}
]
}
谁能告诉我,如何执行这个更新查询?并且还可以检索子文档数组包含所有 "isActive" 的所有文档为 false?
使用mongo update documentation进行嵌套键更新使用$elemMatch
查询如下
db.collectionName.update({"source":{"$elemMatch":{"bookid":ObjectId("552cd77e31456e192df6ad8e")}}},{"$set":{"source.$.isActive":false}})
如果多个文件更新然后使用这个mongo update add multi true.