MongoDB - 更新多个文档解决方案 - 更新文档计数器或插入(如果不存在)



我有以下titles集合结构:

[
...,
{ 
"_id" : ...,
"title": "some title",
"counter": 3
}, 
{ 
"_id" : ...,
"title": "some title 2",
"counter": 1
}, 
...
]

给定标题列表(例如"title1"、"title2"等(,如果标题不存在,我想插入带有计数器 1 的标题,或者如果计数器已经存在,则将其递增 1。

我可以在 1 个 mongo 查询中对多个标题执行此操作吗?

我知道我可以为每个标题运行更新查询,但它似乎效率低下。

谢谢!

(P.S - 我看到很多关于"增量或插入不存在"的帖子,但没有找到很多解决方案(

因此,如果您有多个过滤器,那么您通常会使用$in运算符,因此,如果您喜欢:

db.getCollection('collectionName').updateMany(
{title: {$in : ["some title",  "some title 3"]}},
{$inc : {counter: 1}}, {upsert : true})

上面,查询只会更新匹配的文档,但不更新。由于您有多个过滤器,因此您可以利用 .bulkwrite((,它可以具有一组高达 100k 的操作。

let bulkArr = [];
let titles = ["some title", "some title3"];
for (const title of titles) {
bulkArr.push({
updateOne: {
filter:  { ...{title} },
update: { $inc: { counter: 1 } },
upsert : true
},
});
}
db.collection.bulkWrite(bulkArr);

.bulkWrite()还将对数据库执行多个更新操作,但通过使用它,您可以避免执行多个数据库调用。

相关内容

  • 没有找到相关文章

最新更新