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 中更新和更新多个文档

MongoDB——文档操作(更新文档)

MongoDB——文档操作(更新文档)

通过在 body、mongoose/mongodb 中提供文档来更新多个文档

MongoDB:如何使用单个命令更新多个文档?

在 MongoDB 中更新具有不同 id 的多个文档