如何在数组mongodb下增加重复值的计数器

时间:2018-03-27 08:13:03

标签: arrays node.js mongodb mongoose mongodb-query

我有一个像这样的猫鼬模式:

Tuple

现在,如果我想在一个查询上更新多列,即“符号”值,那么MongoDB updateMany Query就可以了。这是查询:

{
    "_id" : ObjectId("5a7acda13b808dbed05d6505"),
    "symbol" : "@AKS",
    "counter" : 4
},
{
    "_id" : ObjectId("5a7acda13b808dbed05d6506"),
    "symbol" : "@AKD",
    "counter" : 5
}

通过此查询如果我给出数组值,即

MyCollectionName.updateMany({ 'symbol' : { $in : req.body.array}}, { $inc : { 'counter': 1 } }, function(err, data) {
                if(err) {
                    console.log('error')
                } else {
                    console.log('value incremented')
                }
            });

然后它将增加两者的计数器。我的问题是如果我将在数组上提供相同的值,那么我想要两个增量而不是一个。像这样:

var array = ["@AKS", "@AKD"];

但目前它只做一个。这可能吗???? 任何帮助都非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用 bulkWrite API进行此更新,因为它允许您撰写一系列 bulkWrite() 写入操作,您可以在其中对数组中的每个元素使用updateOne操作。以下示例显示了如何在您的案例中应用它:

SELECT COUNT(*) FROM table WHERE eye_color='brown';

答案 1 :(得分:0)

如果您只使用updateMany而不是使用forEach,那该怎么办:

const yourArray = req.body.array;
yourArray.forEach(function(item) {
   MyCollectionName.update({ 'symbol': { $in: item }}, { $inc: { 'counter': 1 }, function (err, data) {
    // additional code
  }); 
});