更新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);
{ "_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);