MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
上面,查询只会更新匹配的文档,但不会进行upsert。由于您有多个过滤器,因此您可以利用.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()
还将对数据库执行多个更新操作,但是通过使用此操作,您可以避免进行多个数据库调用。
以上是关于MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 驱动程序在 MongoDB 中更新和更新多个文档