如何仅替换未发送的空字段。
我的产品实例:
Product p1 = new Product(){ Name : "Apple", Money: 2 };
我的文档:
{
"Id" : 1
"Name" : "Apppple",
"Money" : 3,
"Color" : "Red"
}
我运行了这段代码:
var _filterDef = Builders<Product>.Filter.Eq(x => x.Id, 1);
ProductCollection.ReplaceOne(_filterDef, p1);
结果:红色命名字段为空...
{
"Id" : 1
"Name" : "Apple",
"Money" : 2,
"Color" : null
}
我想结果:红色命名字段不为空
{
"Id" : 1
"Name" : "Apple",
"Money" : 2,
"Color" : "Red"
}
答案 0 :(得分:1)
看起来您正在尝试更新文档而不是替换它。在这种情况下,请使用记录here的更新操作。您需要使用{$ 3}}中的“$ set”运算符。
答案 1 :(得分:1)
您可以将整个文档作为更新发送,也可以使用UpdateOne
有选择地更新字段。
var _filterDef = Builders<Product>.Filter.Eq(x => x.Id, 1);
var update = Builders<Product>.Update.Set("Name", "Apple").Set("Money", 2);
ProductCollection.UpdateOne(_filterDef, update );
此处有更多示例https://docs.mongodb.com/getting-started/csharp/update/