用$ in更新的mongoose无法正常工作

时间:2016-01-26 10:37:18

标签: node.js mongodb mongoose mongodb-query

我的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才会更新。

有人能发现问题吗?

2 个答案:

答案 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。