Mongodb C# 批量 update/replace 子集合
Mongodb C# bulk update/replace on subcollection
给出以下对象结构:
public class RootDocument
{
public Guid Id { get; set; }
public string SomeProperty { get; set; }
public List<ChildDocument> Documents { get; set; }
}
public class ChildDocument
{
public Guid Id { get; set; }
public string Name { get; set; }
public string SomeProperty { get; set; }
}
我想更新 RootDocument
集合中所有 RootDocument
上指定 Id
的所有 ChildDocuments
。
我们的想法是像这样在批量操作中更新它们:
var document = new ChildDocument() { Id = <id of existing ChildDocument>, Name = ..., ...);
var bulkOperations = new WriteModel<RootDocument>[]
{
new UpdateManyModel<RootDocument>(
Builders<RootDocument>.Filter.Eq("Documents.Id", document.id),
Builders<RootDocument>.Update.AddToSet(x => x.Documents, document))
};
await mongoDatabase.GetCollection<RootDocument>()
.BulkWriteAsync(bulkOperations, new BulkWriteOptions { IsOrdered = false });
但是AddToSet
不是现有ChildDocument
的替换操作。
使用最新的 MongoDB C# 驱动程序实现此要求的最佳方法是什么?
阅读 positional operator。在这种情况下,您不需要批量,只需要 UpdateMany。
collection.UpdateMany(
Builders<RootDocument>.Filter.Eq("Documents.Id", document.Id),
Builders<RootDocument>.Update.Set("Documents.$", document));
这将遍历集合并匹配具有指定 Id 的 ChildDocument 的任何 RootDocument,随后将其替换为提供的文档。
给出以下对象结构:
public class RootDocument
{
public Guid Id { get; set; }
public string SomeProperty { get; set; }
public List<ChildDocument> Documents { get; set; }
}
public class ChildDocument
{
public Guid Id { get; set; }
public string Name { get; set; }
public string SomeProperty { get; set; }
}
我想更新 RootDocument
集合中所有 RootDocument
上指定 Id
的所有 ChildDocuments
。
我们的想法是像这样在批量操作中更新它们:
var document = new ChildDocument() { Id = <id of existing ChildDocument>, Name = ..., ...);
var bulkOperations = new WriteModel<RootDocument>[]
{
new UpdateManyModel<RootDocument>(
Builders<RootDocument>.Filter.Eq("Documents.Id", document.id),
Builders<RootDocument>.Update.AddToSet(x => x.Documents, document))
};
await mongoDatabase.GetCollection<RootDocument>()
.BulkWriteAsync(bulkOperations, new BulkWriteOptions { IsOrdered = false });
但是AddToSet
不是现有ChildDocument
的替换操作。
使用最新的 MongoDB C# 驱动程序实现此要求的最佳方法是什么?
阅读 positional operator。在这种情况下,您不需要批量,只需要 UpdateMany。
collection.UpdateMany(
Builders<RootDocument>.Filter.Eq("Documents.Id", document.Id),
Builders<RootDocument>.Update.Set("Documents.$", document));
这将遍历集合并匹配具有指定 Id 的 ChildDocument 的任何 RootDocument,随后将其替换为提供的文档。