将多个文档升级到mongoDB

时间:2017-12-29 08:31:49

标签: arrays mongodb upsert

我有数组值,数组中的某些值可能已存在于我的数据库中。我想upsert新值,增加旧值的计数。 一种方法是:

  • 对于数据库中存在的所有值,请使用更新命令和增量计数。可以使用:db.test.update({ link: {$in: ["A", "B"]}}, {$inc: {count: 1}}, {upsert: true, multi:true})

  • 完成
  • 对于我的数据库中不存在的所有值,请检查每个值并将其插入数据库。

第二步可能会给网络带来一些负担。有没有办法在一个命令中执行第二步?

例如,请考虑

我的数据库的初始状态

{ "_id" : ObjectId("5a45f97f84527190e1f28cb7"), "link" : "A", "count" : 3 } 

我的数组如下:const values = ['A', 'B', 'C']

现在我想要这样的东西:

{"_id": ObjectId("abc"), "link": "A", "count" : 4},
{"_id": ObjectId("xyz"), "link": "B", "count" : 1},
{"_id": ObjectId("fgh"), "link": "C", "count" : 1}

1 个答案:

答案 0 :(得分:0)

要以最佳方式完成第二步(如您所述),您可以使用DB方法在find()中执行查找。

如果DB中没有数组值,则find()将返回一个空对象。所以你只看到从find()返回的对象的长度。如果发现为空,请插入DB,否则请更新信息。

nodejs环境的示例代码:

var db = mongojs('dbname', ['collection_name']);

var theLink = 'XYZ';

db.collection_name.find({link: theLink}, function (err, obj) {
    if (err)
        throw err;
    if (obj.length == 0)
        // write logic to insert
    else
        // write logic to update
});