如何在 MongoDb 中简单地执行 update/replace 多文档操作
How to simply perform a update/replace many documents operation in MongoDb
这可能是您可以执行的最常见和最基本的数据库操作之一。但是,很难在 MongoDb 中执行此操作。
C# 驱动程序中有一个 UpdateManyAsync
方法。但我能找到的只是这样的例子;
以下操作会更新违规次数大于 4 的所有文档,并 $set a flag for review:
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 中执行此操作。
C# 驱动程序中有一个 UpdateManyAsync
方法。但我能找到的只是这样的例子;
以下操作会更新违规次数大于 4 的所有文档,并 $set a flag for review:
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 });