Обновление списка списка массива списка Монго обновления - PullRequest
0 голосов
/ 24 сентября 2018
{
  "_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; }
}

Я хотел бы обновить значения массива Types "Status" = " P " в массиве Details , когдаСтолбец "_id" и значение "Types.InvoiceType" = " OO " совпадают.

Пожалуйста, предоставьте мне пример того, как добиться успеха в c # с помощью драйвера mongo.

1 Ответ

0 голосов
/ 24 сентября 2018

Вот, пожалуйста:

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);
...