更新list of list of list数组mongo update

Update list of list of list array mongo update

{
  "_id": "111de970-4f3f-4ae6-9d3b-396e60ff50aa",
  "ClaimNumber": 111,
  "Details": [
    {
      "Amount": "100",
      "Types": [
        {
          "InvoiceType": "OO",
          "Status": "N"
        },
        {
          "InvoiceType": "PP",
          "Status": "N"
        }
      ]
    },
    {
      "Amount": "100",
      "Types": [
        {
          "InvoiceType": "OO",
          "Status": "N"
        },
        {
          "InvoiceType": "SS",
          "Status": "N"
        }
      ]
    }
  ]
}
public class Type
{
    public string InvoiceType { get; set; }
    public string Status { get; set; }
}

public class Detail
{
    public string Amount { get; set; }
    public List<Type> Types { get; set; }
}

public class RootObject
{
    public string _id { get; set; }
    public int ClaimNumber { get; set; }
    public List<Detail> Details { get; set; }
}

当"_id" 列和 "Types.InvoiceType" = "OO" 值匹配。

请提供一个示例,说明如何使用 mongo 驱动程序在 C# 中实现。

好了:

var filter = Builders<RootObject>.Filter.Eq(o => o._id, "111de970-4f3f-4ae6-9d3b-396e60ff50aa");
var update = Builders<RootObject>.Update.Set($"{nameof(RootObject.Details)}.$[].{nameof(Detail.Types)}.$[elem].{nameof(Type.Status)}", "P");
var arrayFilter = new JsonArrayFilterDefinition<BsonDocument>($"{{ 'elem.{nameof(Type.InvoiceType)}': 'OO' }}");
var updateOptions = new UpdateOptions { ArrayFilters = new[] { arrayFilter } };
var result = new MongoClient()
    .GetDatabase("database")
    .GetCollection<RootObject>("collection")
    .UpdateOne(filter, update, updateOptions);