考慮下面的類如何構建UpdateBuilder
public class Something
{
public ObjectId Id;
public DateTime DbUpdatedAt;
public string AnotherProperty;
public int SomeIntProp;
}
我通常會做部分更新與下面的代碼
var obj = ... // an instance of Something
var update = new UpdateBuilder<Something>();
update.Set(x => x.DbUpdatedAt, DateTime.UtcNow);
...
/// later on,
// database is an instance of MongoDatabase
database.GetCollection("CollectionName")
.Update(Query<Something>.Eq(x => x.Id, something.Id), update);
問題是,當避免「重複的元素名稱」的錯誤,我我不知道是否有任何方法檢查update
是否已被配置爲設置DbUpdatedAt
的值。 如果我盲目地嘗試爲DbUpdatedAt
設置新值,則會出現錯誤。
...
/// later on,
update.Set(x => x.DbUpdatedAt, DateTime.UtcNow.AddHours(1)); // this throws a Duplicate element name error
// database is an instance of MongoDatabase
database.GetCollection("CollectionName")
.Update(Query<Something>.Eq(x => x.Id, something.Id), update);
我明白爲什麼錯誤發生。我需要一種方法,
- 檢測有重複的關鍵場景,
- 更換舊密鑰,用新密鑰,值對值對。
謝謝。這很好。爲了在任何情況下都能正常工作,我總是必須使用SetWithOverride(因爲我不確定另一個函數是否已經調用了set)。考慮到這一點,該功能是否有任何性能問題?代碼將兩個更新語句轉換爲bson文檔,然後返回到更新語句。所有這些反序列化/序列化都會對許多調用產生影響嗎? –
另外,我創建了一個JIRA問題(https://jira.mongodb.org/browse/CSHARP-902)。希望,它會很快實施:) –