2016-11-07 61 views
0

我是新來的c#和mongodb,並且無法解析我的api更新方法。我正在關注本教程here。我試圖修復它棄用,因爲我去,我目前停留在這部分C#Mongodb CRUD運算符更新方法

public void Update(ObjectId id,Product p) 
    { 
     p.Id = id; 
     var res = Query<Product>.EQ(pd => pd.Id,id); 
     var operation = Update<Product>.Replace(p); 
     _db.GetCollection<Product>("Products").Update(res,operation); 
    } 

我已經在我的代碼更新,它看起來像這樣。

public void Update(ObjectId id, Product p) 
    { 
     p.ProductId = id; 
     var res = Builders<Product>.Filter.Eq(pd => pd.ProductId, id); 
     var operation = Builders<Product>.Update(p); 
     _db.GetCollection<Product>("Product").UpdateOne(res, operation); 
    } 

我的問題是關於.update我不能我們作爲一個方法......那麼什麼是構建此更新方法的正確方法是什麼?提前感謝任何和所有的幫助。

回答

0

您正在使用的建築商不正確地

Builders<Product>.Update 

不是方法,它暴露了一些更新操作,您可以使用,即集,AddToSet等

根據您所要實現的目標,您可以按如下使用它,如果你想更新您可以使用此單個字段:

var operation = Builders<Product>.Update.Set(u => u.SomeField, "SomeValue"); 

而且你可以把它們結合在一起,即

var operation = Builders<Product> 
    .Update 
     .Set(u => u.SomeField, "SomeValue") 
     .Set(u => u.SomeOtherField, "SomeOtherValue"); 

因此,使用你的代碼(這看起來像你過濾特定產品ID,然後更新該非常相同的字段)

public void Update(ObjectId id, Product p) 
{ 
    var res = Builders<Product>.Filter.Eq(pd => pd.ProductId, id); 
    var operation = Builders<Product>.Update.Set(u => u.ProductId, id); 
    _db.GetCollection<Product>("Product").UpdateOne(res, operation); 
} 

在哪裏,如果你想完全替換文件,您可能會使用ReplaceOne()而不是更新