如何使用NodeJS将MongoDB中现有的唯一id合并



当我插入一个具有重复唯一id的新条目时,我想对一个文档字段求和。这就是我目前所拥有的:

MongoClient.connect(process.env.MONGODB_URI || process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
if (err) throw err;
const dbo = db.db("mydb");
const messageTable = dbo.collection("comments");
for(var key in words){
let myobj = 
[{ 
_id: key,
frequency: words[key]
}];
messageTable.insertMany(myobj, function(err, res){
if (err) throw err;
console.log("documents inserted");
});
messageTable.aggregate([
{ $match: { _id: key } },
{
$group: {
_id: key, 
total: {
$sum: "$frequency"
}
}
},
{ $merge: { into: "comments", whenMatched: "replace" } }
]);
}
})

在阅读文档时,我试图使用聚合方法来合并新条目,如果密钥已经作为唯一id存在。这目前不起作用。如何使用NodeJS合并MongoDB中的重复文档?

我已经找到了一种方法,通过阅读文档并在reddit用户的帮助下实现这一点。如果有人想做类似的事情,这是最简单的方法:

messageTable.findOneAndUpdate({ "_id" : key },{$set: { "_id" : key}, $inc : { "frequency" : words[key] }},{upsert: true}).then(
console.log("document updated or inserted")
)

使用此方法,第一个参数是您的查询,第二个参数更改第一个匹配,在我的情况下会增加频率字段,第三个参数是该方法的选项。upstart选项的默认值为false,但当为true时,如果不存在新文档,则会创建一个新文档。如果你想阅读更多,你可以在这里找到信息

最新更新