我在文档中有一个项目列表,每个项目都有一个名为for_sale的布尔字段。
我有_id
和item_id
的列表,我想更新这个_id,所有的item_id
都有for_sale = true
。
比方说我想改变的item_id
是[1,3]
例如:
{
"_id" : ObjectId("598098245078027348"),
"items" : [
{
"item_id": 1
"item_name" : "my_item_one",
"price" : 10,
"for_sale": false
},
{
"item_id": 2
"item_name" : "my_item_two",
"price" : 20
"for_sale": false
},
{
"item_id": 3
"item_name" : "my_item_three",
"price" : 30
"for_sale": false
}
]
}
我想要的结果:
{
"_id" : ObjectId("598098245078027348"),
"items" : [
{
"item_id": 1
"item_name" : "my_item_one",
"price" : 10,
"for_sale": true
},
{
"item_id": 2
"item_name" : "my_item_two",
"price" : 20
"for_sale": false
},
{
"item_id": 3
"item_name" : "my_item_three",
"price" : 30
"for_sale": true
}
]
}
我该怎么做?
您可以使用$[]更新操作来实现这一点。
下面的更新查询是您正在寻找的
db.test.updateOne({
"_id": ObjectId("598098245078027348")
}, {
"$set": {
"items.$[elem].for_sale": true
}
}, {
arrayFilters: [
{
"elem.item_id": {"$in": [1, 3]}
}
]
})