我有一個檔案,它包含一個 CustomFields 檔案,其中還有檔案。
如何正確將Checkpoint Comment檔案名稱更新為Checkpoint Comment-test.
我嘗試如下,但它不起作用。
var filter = Builders<Visit>.Filter;
UpdateDefinition<Visit> update = Builders<Visit>.Update.Rename(x => x.CustomFields.FirstOrDefault(f => f.Name == "Сheckpoint Comment").Name, "Сheckpoint Comment-test");
Collection.UpdateMany(filter.Where(x => true), update);
{
"_id": ObjectId("61e5707d23516865481ebee7"),
"CustomFields": {
"Сheckpoint Comment": {
"FieldId": ObjectId("6149d5de44175b8324482904"),
"Type": "Text",
"ValueBson": "test"
},
"Time of arrival at the checkpoint": {
"FieldId": ObjectId("6149d5de44175b8324482905"),
"Type": "DateTime",
"ValueBson": null
}
}
}
uj5u.com熱心網友回復:
解決方案
解決方案 1
如果您將[BsonElement]屬性應用于類的屬性,如下所示:
public class Visit
{
public ObjectId Id { get; set; }
public CustomField CustomFields { get; set; }
}
public class CustomField
{
[BsonElement("Сheckpoint Comment")]
public BsonProp Checkpoint { get; set; }
[BsonElement("Time of arrival at the checkpoint")]
public BsonProp Time { get; set; }
}
public class BsonProp
{
public ObjectId FieldId { get; set; }
public string Type { get; set; }
public string ValueBson { get; set; }
}
然后指定要重命名的欄位:
UpdateDefinition<Visit> update = Builders<Visit>.Update.Rename(x => x.CustomFields.Checkpoint, "CustomFields.Сheckpoint Comment-test");
Collection.UpdateMany(filter.Empty, update);
解決方案 2
在不應用[BsonElement]屬性的情況下,只需在 中指定要重命名的欄位string。
UpdateDefinition<Visit> update = Builders<Visit>.Update.Rename("CustomFields.Сheckpoint Comment", "CustomFields.Сheckpoint Comment-test");
Collection.UpdateMany(filter.Empty, update);
關注與建議
重命名后的欄位需要帶前綴
CustomFields.as"CustomFields.Сheckpoint Comment-test"因為您正在更新物件中的嵌套欄位。沒有前綴CustomFields.,Сheckpoint Comment-test將與 處于同一級別CustomFields,但不在CustomFields物件內部。filter與_
filter.Where(x => true)
可以替換為
filter.Empty
因為它們是等價的。(因為第一個強制過濾條件絕對正確,而第二個不應用過濾條件)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414132.html
標籤:
