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

时间:2018-07-27 13:01:42

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

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

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

以下操作会更新所有违规大于4的文档,并在$ set中设置要审核的标志:

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

坦率地说,我不知道你们是如何构建应用程序的,但是我们的组织将永远不会嵌入域逻辑,就像多少次违规构成了对数据库查询逻辑的审查。像我可以找到的用于此操作的所有示例一样。

似乎最好的选择是为此使用某种批量api,对于这样一个简单的操作来说似乎没有必要。使批量api执行一千次替换对我来说似乎无效,但是我在这里可能错了?

在其他存储技术和更成熟的API中,执行此操作所需的所有代码为(示例实体框架);

db.UpdateRange(stocks);
await db.SaveChangesAsync();

是否在某个地方对Mongo项目的功能请求进行了跟踪?

1 个答案:

答案 0 :(得分:1)

批量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 });