2016-11-07 59 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()而不是更新