我的代碼如下: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"); //requestIDvar updateData = new BsonDocumentUpdateDefinition<MyModel>(new BsonDocument("$set", toUpdate)); await collection.FindOneAndUpdateAsync(filter, updateData , new FindOneAndUpdateOptions<MyModel>() { IsUpsert = false });
1 回答

慕沐林林
TA貢獻2016條經驗 獲得超9個贊
您沒有指定要更新的內容。
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);
- 1 回答
- 0 關注
- 156 瀏覽
添加回答
舉報
0/150
提交
取消