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