猫鼬如何做多次更新

时间:2016-02-04 15:00:24

标签: node.js mongodb express mongoose

我很难找到更新具有不同价值的多个文档的解决方案。

我有一个应用程序,可以为每个已售出的商品销售我想减少数据库中的数量。

var soldItems = 
[

    {
        "_id": "1"
        "name": "Foo",
        "price": 1.09
    },
    {
        "_id": "2",
        "name": "Bar",
        "price": 2.00
    }

]

var ids = [];

soldItems.forEach(function(item){

   ids.push(item._id);

});

我收集了soldItems对象数组中的所有ID。

现在我想知道数据库中有多少项目数量,然后将数量减少一个。

ModelItem.find({_id: {$in: ids}}, function(err, docs){
    if(err) throw err;

    docs.forEach(function(doc){

        soldItems.forEach(function(item){

            if(doc._id === item._id){
                doc.quantity += -1;
            }

        });            

    });

    Item.update({_id: {$in: ids}}, {$set: docs }, function(err){
        if(err) throw err;


    });

});

显然这是错误的,因为$ set传入数组而不是对象。

我想知道如何为数据库中的每个项目减少一个数量,但同时我不想在数据库中删除少于0个项目。

我确定我从错误的角度看这个。

感谢。

1 个答案:

答案 0 :(得分:2)

改为使用$inc运算符和multi选项:

Item.update({_id: {$in: ids}, quantity: {$gt: 0}}, // selection
            {$inc: {quantity: -1}}, // modifications
            {multi: true}); //options