[英]How to "patch" a Document in DocumentDB using Mongo commands
我的代碼如下:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
UpdateDefinition<MyModel> update = toUpdate.ToBsonDocument();
collection.FindOneAndUpdate(filter, update);
例如,我在 DocumentDB 中的 1 個文檔是:
{
"id": "123",
"delnum": "100001"
}
我的更新是:
{
"is_cancelled" : true
}
FindOneAndUpdate 之后我的預期文檔是:
{
"id": "123",
"delnum": "100001",
"is_cancelled" : true
}
但正在發生的事情是,它將我的文檔替換為 id=123 到以下內容:
{
"is_cancelled" : true
}
我想知道我是否做錯了,或者我的期望結果不正確。
編輯代碼:
MyModel requestID = new MyModel
{
"id" = "123"
};
MyModel toUpdate = new MyModel
{
"is_cancelled" : true
};
var builder = Builders<MyModel>.Update;
UpdateDefinition<MyModel> update =null;
toUpdate.GetType().GetProperties().ToList().ForEach(
x => update = builder.Set(x.Name, x.GetValue(toUpdate, null))
FilterDefinition<MyModel> filter = requestID.ToBsonDocument();
if (update == null) return;
collection.FindOneAndUpdate(filter, update);
編輯:下面的代碼對我有用。
var filterData = Builders<MyModel>.Filter.Eq("id", "123"); //requestID
var updateData = new BsonDocumentUpdateDefinition<MyModel>(new BsonDocument("$set", toUpdate));
await collection.FindOneAndUpdateAsync(filter, updateData , new FindOneAndUpdateOptions<MyModel>() { IsUpsert = false });
您沒有指定要更新的內容。
Mongo 希望 json 看起來像這樣:
{
"$set" : {
"is_cancelled" : true
}
}
您可以使用更新構建器來簡化此操作:
var builder = Builders<MyModel>.Update;
var update = builder.Set("is_cancelled", true);
您還可以在構建器上鏈接多個Set
方法:
var update = builder.Set("a", 1).Set("b", 2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.