mongodb - 如何在 MongoDb 中简单地执行更新/替换多个文档操作

标签 mongodb mongodb-query mongodb-.net-driver

这可能是您可以执行的最常见和最基本的数据库操作之一。但是,如何在 MongoDb 中执行此操作是难以捉摸的。

C# 驱动程序中有一个 UpdateManyAsync 方法。但我能找到的只是这样的例子;

以下操作更新所有违规大于 4 的文档并 $set a flag 以供审查:

try {
   db.restaurant.updateMany(
      { violations: { $gt: 4 } },
      { $set: { "Review" : true } }
   );
} catch (e) {
   print(e);
}

坦率地说,我不知道你们是如何构建应用程序的,但我们的组织永远不会在我们的数据库查询逻辑中嵌入域逻辑,例如有多少违规构成了审查。就像我能为这个操作找到的所有例子一样。

我们的选择似乎充其量是为此使用某种批量 api,这对于如此简单的操作似乎是不必要的。让批量 API 执行一千次单独的替换对我来说似乎无效,但我可能在这里错了?

在其他存储技术和更成熟的 API 中,执行此操作所需的所有代码是(示例 Entity Framework );
db.UpdateRange(stocks);
await db.SaveChangesAsync();

这是否被跟踪为某个地方的 Mongo 项目的功能请求?

最佳答案

批量 API 可以处理它,请参阅下面的代码:

            var updates = new List<WriteModel<CosmosDoc>>();
            foreach (var doc in docs)
            {
                updates.Add(new ReplaceOneModel<CosmosDoc>(doc.Id, doc));
            }
            await MongoDb.DocsCollection.BulkWriteAsync(updates, new BulkWriteOptions() { IsOrdered = false });

关于mongodb - 如何在 MongoDb 中简单地执行更新/替换多个文档操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558542/

相关文章:

javascript - 如何在MongoDB中存储用户的大量消息?

node.js - Mongoose : moment(). 格式不起作用

mongodb - Golang MongoDB 驱动排序

mongodb - MongoDB 中的负搜索

MongoDB + C# 驱动程序 + 地理空间字段查询 - 如何在实体上定义位置属性

c# - 如何使用最新版本的 C# (1.8.2+) 驱动程序获取 MongoCursorEnumerator<T>?

C# MongoDB IAsyncCursor 详解

python - MongoDB:为什么 update() 即使成功也返回 null?

mongodb - 为其他字段的计数创建新字段

node.js - 使用 Node Js 聚合管道在 mongodb 中创建价格范围