【问题标题】:Mongoose how to do multiple updates猫鼬如何进行多次更新
【发布时间】:2016-02-05 16:06:39
【问题描述】:

我很难想出一个解决方案来更新具有不同值的多个文档。

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

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 个项目。

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

谢谢。

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

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

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

    【讨论】:

    • 这种方式可行,但由于某种原因,如果我选择相同的 id 5 次。每个唯一 ID 只会减少一次数量。这是我修改它的代码,因此我不再需要查找。 Item.update({_id: {$in: ids}, 数量: {$ne: 0}}, {$inc: {quantity: -1}}, {multi: true});
    • 那是因为即使ids数组多次包含相同的id,选择查询也只返回1个文档,而不是5次相同的文档。根据需要多次调用该行,或更改增量。
    猜你喜欢
    • 2016-05-14
    • 1970-01-01
    • 2022-06-13
    • 2020-06-27
    • 1970-01-01
    • 2012-03-28
    • 2012-05-18
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多