我有一个连接到MongoDB的NodeJS应用程序。我正在跟踪发生某事的次数。所以,我想要的是:
我有一个有效的代码:
const isInDb = await collection.findOne({
// match all other fields except for the occurrences field
});
if(!isInDb) {
parsedElement.occurrences = 1;
await collection.insertOne(parsedElement);
} else {
await collection.updateOne(isInDb, { $inc: { "occurrences": 1 } });
}
没有更好的方法吗?理想情况下,它将是类似于collection.findAndUpdate或带有upsert或类似的东西。我写的东西是有功能的,但对我来说似乎效率不高,因为我首先必须查询数据库以进行查找,然后再查询数据库以进行更新。
答案 0 :(得分:2)
updateOne使用第三个参数作为选项。设置upsert:true。
collection.updateOne({ /* match properties */ }, { $inc: { "occurrences": 1 } }, { upsert: true })
答案 1 :(得分:1)
collection.updateOne({ /* match properties */ }, {
$set: parsedElement,
$inc: {
"occurrences": 1
}
}, {
upsert: true
})