如何仅替换mongodb中未发送的空字段

时间:2017-04-25 19:40:05

标签: mongodb mongodb-csharp-2.0

如何仅替换未发送的空字段。

我的产品实例:

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"
}

2 个答案:

答案 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/