0
我有一个类似于以下用于存储许可证的文档。不必要的字段被删除。在MongoDB中使用C#驱动程序2.4.4更新两次嵌套文档3.4.6
{
"_id" : "1",
"company_name" : "stackOverflow",
"license_holders" : [
{
"UID" : "AAA-BBB-CCC-DDD",
"software_version" : "1.2.3",
"licenses" : [
{
"creation_date" : "03.03.17",
"is_valid" : true,
"license_id" : "l1"
},
{
"creation_date" : "03.03.16",
"is_valid" : false,
"license_id" : "l2"
}
]
},
{
"UID" : "111-222-333-444",
"software_version" : "1.2.3",
"licenses" : [
{
"creation_date" : "05.05.17",
"is_valid" : true,
"license_id" : "l3"
},
{
"creation_date" : "05.05.16",
"is_valid" : false,
"license_id" : "l4"
}
]
}
]
}
我可以通过这个查询更新的软件版本与给定UID:
public async Task<Customer> UpdateLicenseHolderSoftwareVersion(string uid, string softwareVersion) {
var update = Builders<Customer>.Update.Set(c => c.LicenseHolders[-1].CurrentSoftwareVersion, softwareVersion);
Customer customer = await DMSLicenseCollection.FindOneAndUpdateAsync(c => c.LicenseHolders.Any(h => h.UID == uid), update);
return customer;
}
我无法找到一个方法来更新许可证的"is_valid"
场。我正在尝试使用UID
和LicenseId
字段选择正确的许可证。我尝试了很多东西,但没有成功。嵌入这么多文档是不好的做法?或者我缺少一种方法来更新和检索数组内的几层嵌套文档。谢谢...
感谢您的建议,特别是对于字典之一。根据mongoDB,UID和license_id字段保证是唯一的,但它们不是主键。我发现你的解决方案替代了整个文档,而不是试图自动更新字段。我试图找到一种方法,只在可能的情况下替换许可证文件,而不是整个客户文件。感谢你的回答 :) – qua11q7