我的代码如下: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 关注
- 117 浏览
添加回答
举报
0/150
提交
取消