使用MongoDB C#/.NET驱动程序版本2.11.5。这是我的收藏结构。
CollectionName:部署
{
"_id" : ObjectId("60263b3279357e12775bfb21"),
"version" : "P3-V1.0",
"productId" : "6020f75d103d4895f12c88ec",
"hierarchy" : "6020f8ad103d4895f12c88ed",
"description" : "P3-T1-V1.0",
"policies" : [
{
"name" : "Policy-1",
"description" : "Policy-1",
"rules" : [
{
"subject" : "abc.def@xyz.com",
"status" : "InProgress",
"comments" : "",
"updatedBy" : "",
"approvalId" : "8f7c8767-6613-4aa2-9b87-7778a42512bd",
"requestDate" : ISODate("2021-02-12T08:29:32.000Z")
},
{
"subject" : "ghi.jkl@xyz.com",
"status" : "InProgress",
"comments" : "",
"updatedBy" : "",
"approvalId" : "9e7c8767-6613-4aa2-9b87-7778a42512ee",
"requestDate" : ISODate("2021-02-11T08:29:32.000Z")
}
]
},
{
"name" : "Policy-2",
"description" : "Policy-2",
"rules" : [
{
"subject" : "mno.pqr@xyz.com",
"status" : "InProgress",
"comments" : "",
"updatedBy" : "",
"approvalId" : "1a6c8767-6613-4aa2-9b87-7778a42512bd",
"requestDate" : ISODate("2021-02-12T08:29:32.000Z")
},
{
"subject" : "stu.vwx@xyz.com",
"status" : "InProgress",
"comments" : "",
"updatedBy" : "",
"approvalId" : "2z0c8767-6613-4aa2-9b87-7778a42512ee",
"requestDate" : ISODate("2021-02-11T08:29:32.000Z")
}
]
}
]
}C#类名:
部署(有多个IList<Policy> Policies)
策略(有多个IList<Rule> Rules)
规则
更新规则中的状态、注释和updatedBy字段的更新查询是什么,给定Policy.Name (对于ex: Policy-1)和Rule.subject (对于ex: updatedBy)
谢谢你的帮助。
发布于 2021-02-12 12:21:34
关于这个问题-
Querying, filtering and updating multiple level nested arrays in MongoDB using C#
我已经执行了以下内容,并如预期的那样起了作用。
var updateFilter = Builders<Deployment>.Filter.Eq(f => f.Id, deployment.Id);
var updateBuilder = Builders<Deployment>.Update
.Set("policies.$[i].rules.$[j].comments", rule.Comments)
.Set("policies.$[i].rules.$[j].completionDate", rule.CompletionDate)
.Set("policies.$[i].rules.$[j].status", Enum.GetName(rule.Status))
.Set("policies.$[i].rules.$[j].updatedBy", rule.UpdatedBy);
var arrayFilters = new List<ArrayFilterDefinition>()
{
new BsonDocumentArrayFilterDefinition<Policy>(new BsonDocument("i.name", policy.Name)),
new BsonDocumentArrayFilterDefinition<Rule>(new BsonDocument("j.subject", rule.Subject))
};
var updateOptions = new UpdateOptions()
{
ArrayFilters = arrayFilters
};
await _deploymentRepository.UpdateOneAsync(updateFilter, updateBuilder, updateOptions);https://stackoverflow.com/questions/66169408
复制相似问题