C#Mongodb CRUD操作符更新方法

时间:2016-11-07 19:49:11

标签: c# mongodb

我是c#和mongodb的新手,无法为我的api解析我的更新方法。我正在关注本教程here。我正试图修复它的弃用,我目前仍然坚持这部分

  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我不能将它作为一种方法......那么构建此更新方法的正确方法是什么?提前感谢任何和所有的帮助。

1 个答案:

答案 0 :(得分:0)

您正在错误地使用构建器

Builders<Product>.Update

不是一种方法,它暴露了一些你可以使用的更新操作,即Set,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()而不是Update