Mongodb CRUD操作符的更新方法

本文关键字:更新 新方法 操作符 CRUD Mongodb | 更新日期: 2023-09-27 18:16:53

我是c#和mongodb的新手,在解决我的api的更新方法时遇到了麻烦。我在这里遵循这个教程。我正在尝试修复它的弃用,因为我走了,我目前卡在这个部分

  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上,我不能把它作为一种方法…那么构造这个更新方法的正确方法是什么呢?提前感谢所有的帮助。

Mongodb CRUD操作符的更新方法

您正在错误地使用生成器

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