我的代码如下:
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"
}
我的 toUpdate 是:
{
"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 });