我有数组值,数组中的某些值可能已存在于我的数据库中。我想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}
答案 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
});