如何增加Bulk数组字段mongodb上的Counter

时间:2018-02-07 11:31:24

标签: node.js mongodb mongoose

我有一个像这样的数据集:

{
        "_id" : ObjectId("2q9abf6b3b758dbed05d4875"),
        "fruit" : "APPLE",
        "count" : 0,
},
{
        "_id" : ObjectId("2q9abf6b3b758dbed05d4876"),
        "fruit" : "MANGO",
        "count" : 0,
},
{
        "_id" : ObjectId("2q9abf6b3b758dbed05d4877"),
        "fruit" : "BANANA",
        "count" : 0,
}

我想让计数器增加1,我已经知道了。我的问题是如何增加计数器的批量。

假设我有一个值为

的数组
array = ['APPLE', 'BANANA'];

现在我想只增加数组中存在的那些元素的计数器。

所以在数组之后,期望的结果将是这样的。

{
        "_id" : ObjectId("2q9abf6b3b758dbed05d4875"),
        "fruit" : "APPLE",
        "count" : 1,
},
{
        "_id" : ObjectId("2q9abf6b3b758dbed05d4876"),
        "fruit" : "MANGO",
        "count" : 0,
},
{
        "_id" : ObjectId("2q9abf6b3b758dbed05d4877"),
        "fruit" : "BANANA",
        "count" : 1,
}

注意:这只是一个基本示例。数组最多可容纳50个条目或更多条目。什么是最好的appreoach。 我使用MongoDB的mongoose在Nodejs-Express Environment上。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

一种可能的方法是在数据库中查询所有文档,这些文档的水果值与您拥有的数组中的任何值相匹配。然后遍历返回的对象数组。

YourModel.find({fruit: { $in: yourArray }}, function(err, foundFruits){
    if (err){
        //handle error
    }
    foundFruits.forEach(function(fruit){
        //make all the changes you want to make here
        //for example, incrementing counter:
        fruit.counter += 1;
        fruit.save();
    });
});

请注意,如果您要做的只是增加计数器,而不进行其他更改,那么您只需在查询中使用update选项,或者作为chridam建议使用$ inc选项