【发布时间】:2016-09-03 16:42:39
【问题描述】:
假设我有一个包含这个单一文档的集合:
{
"_id" : ObjectId("…"),
"cartId" : "61",
"items" : [
{
"prodType" : "hardware",
"prod" : "screwdriver",
"checked": false
},
{
"prodType" : "hardware",
"prod" : "hammer",
"checked": false
},
{
"prodType" : "decor",
"prod" : "vase",
"checked": false
}
]
}
我想做findAndModify 来查找任何 硬件产品并修改其checked 字段。然后它看起来像这样:
db.col.findAndModify({
query: {
items: {
$elemMatch: {
prodType: "hardware"
}
}
},
update: {
$set: {
"items.$.checked": true
}
}
})
好的,但这不是全部。 findAndModify 将返回 whole 匹配的文档,我想专门投影匹配(也已修改)的数组项,所以我将在我的查询中添加一个 fields 部分:
db.col.findAndModify({
query: {
items: {
$elemMatch: {
prodType: "hardware"
}
}
},
update: {
$set: {
"items.$.checked": true
}
},
fields: {
items: {
$elemMatch: {
prodType: "hardware"
}
}
}
})
现在问题是:MongoDB 是否保证我的查询返回的数组项与update 部分中匹配(和修改)的数组项完全相同,即使我们有两个项匹配条件?
【问题讨论】:
标签: mongodb mongodb-query