2017-04-25 25 views
0

如何只替換未發送的空字段。如何只替換mongodb中未發送的空字段

我的產品實例:

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

回答

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/

+0

感謝名單更多的例子,我想知道是否有一個動態的方式:) –

+0

Np個。直接使用驅動程序時我不這麼認爲。您可能會發現一些對象建模框架,它將刪除這種交互,並將您的模型直接映射到mongo db文檔中,但我沒有任何名稱。 – Veeram