我的JS中有以下mongoose更新:
var ids=[1,3];
restid=1;
db.model('rests').update({ _id: restid,'menu.id': {$in: ids}}, {$inc: {'menu.$.soldCounter': 1}}, {multi: true},function(err) {
if(err)
console.log("Error while updating sold counters: " + err.message);
});
出于某种原因,更新是在rest
文档上进行的,_id=1
仅在menu.1.soldCounter
上,而不在menu.3.soldCounter
上
我已多次测试过,结论是只有ids
数组中的第一个ID才会更新。
有人能发现问题吗?
答案 0 :(得分:0)
这是因为$运算符充当匹配的第一个元素的占位符,在指南中说明:https://docs.mongodb.org/v2.6/reference/operator/update/positional/
目前无法更新单个运算符中的所有子文档字段。以下是对此函数请求的讨论:https://jira.mongodb.org/browse/SERVER-1243
答案 1 :(得分:0)
实际上有办法做到这一点:
var indexes = [1,2,3];
var update = { $inc: {} };
for (var i = 0; i < indexes.length; ++i) {
update.$inc[`menu.${indexes[i]}.soldCounter`] = 1;
}
db.model('rests').update({ _id: rest._id }, update, function(err) {
if(err)
console.log("Error while updating sold counters: " + err.message);
});
您需要知道要在高级中更新的索引。然后只需要一次调用DB。