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

我的代码如下:


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 });


森栏
浏览 119回答 1
1回答

慕沐林林

您没有指定要更新的内容。Mongo 期望 json 看起来像这样:{&nbsp; "$set" : {&nbsp; &nbsp; "is_cancelled" : true&nbsp; }}您可以使用更新生成器来简化操作:var builder = Builders<MyModel>.Update;var update = builder.Set("is_cancelled", true);Set您还可以在构建器上链接多个方法:var update = builder.Set("a", 1).Set("b", 2);
打开App,查看更多内容
随时随地看视频慕课网APP