gpt4 book ai didi

c# - 如何使用 Mongo 命令将 DocumentDB 中的文档 "patch"

转载 作者:行者123 更新时间:2023-11-30 22:53:52 26 4
gpt4 key购买 nike

我的代码如下:

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

最佳答案

您没有指定要更新的内容。

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

关于c# - 如何使用 Mongo 命令将 DocumentDB 中的文档 "patch",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56803373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com