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