为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Mongo 命令“修补”DocumentDB 中的文档

如何使用 Mongo 命令“修补”DocumentDB 中的文档

C#
森栏 2023-05-14 16:16:17
我的代码如下: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);


查看完整回答
反对 回复 2023-05-14
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信