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