【发布时间】:2020-07-15 03:52:48
【问题描述】:
我有一个对象
{
"_id": "testobject",
"A": "First line",
"B": "Second line",
"C": "Third line"
}
我想向我的 API 发送一个 REST PATCH 请求以仅更新这些属性之一
{
"_id": "testobject",
"C": "Forth line"
}
这被解析成一个类
public class SomeObject {
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
我现在需要更新 MongoDB 中的现有文档,但只更新属性 C。
我可以为这条记录创建一个更新定义
UpdateDefinition<SomeObject> update = Builders<SomeObject>.Update.Set(x => x.C, <value of property C>)
或者我可以硬编码检查每个属性以查看它是否为空
IList<UpdateDefinition<SomeObject>> updates = new List<UpdateDefinition<SomeObject>>();
if (!string.IsNullOrEmpty(C)) {
updates.Add(UpdateDefinition<SomeObject> update = Builders<SomeObject>.Update.Set(x => x.C, <value of property C>));
}
if (!string.IsNullOrEmpty(C)) {
updates.Add(UpdateDefinition<SomeObject> update = Builders<SomeObject>.Update.Set(x => x.C, <value of property C>));
}
但是,如果我有许多属性和许多子属性,这可能会很快变得非常大。另一个问题是,如果我故意将属性的值设置为空,那么它根本不会更新记录,因为它正在寻找非空的字段。
如何在 .NET 中动态地对 MongoDB 文档进行部分更新,以便我有一个通用的 PATCH API 调用,它可以采用文档具有的任何参数并且只更新指定的属性?
【问题讨论】:
标签: c# mongodb rest updates partial