3

给出了以下对象结构:

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; }
}

我想更新集合中所有ChildDocuments指定Id的所有RootDocument内容。RootDocument

我们的想法是像这样在批量操作中更新它们:

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# 驱动程序实现此要求的最佳方式是什么?

4

1 回答 1

3

阅读位置运算符。在这种情况下,您不需要批量,只需 UpdateMany。

collection.UpdateMany(
  Builders<RootDocument>.Filter.Eq("Documents.Id", document.Id),
  Builders<RootDocument>.Update.Set("Documents.$", document));

这将遍历集合并匹配具有具有指定 Id 的 ChildDocument 的任何 RootDocument,然后将其替换为提供的文档。

于 2016-06-07T16:23:52.707 回答