簡體   English   中英

如何使用 Mongo 命令在 DocumentDB 中“修補”文檔

[英]How to "patch" a Document in DocumentDB using Mongo commands

我的代碼如下:

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

您沒有指定要更新的內容。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM