我找到了一种使用mongodb的UpdateDefinitionBuilders的方法,但documentation并没有显示太多...

我需要能够动态构建我的更新查询,所以我考虑这样做:

var update = Builders<Product>.Update;

update.Set("add A update");

if ()
    update.Set("add X update");
else
    update.Set("add Y update");

update.Set("add B update");

if ()
    update.Set("add Z update");
else
    update.Set("add P update");

Collection.UpdateOneAsync(filter, update, updateOptions);

但它给出了一个编译错误:

cannot convert from UpdateDefinitionBuilder UpdateDefinition

我看了看,但找不到一个解决方案,如何处理这个UpdateDefinitionBuilders

有人能给出一个如何使用这个类的代码示例吗?

推荐答案

如果需要简单地更新多个属性,可以在update builder上调用Set,然后再调用Set个扩展方法.可以使用lambda表达式或属性名称.

var update = Builders<Product>.Update
    .Set(p => Name, "Name value")
    .Set(p => Description, "Description value");

collection.UpdateOneAsync(filter, update, updateOptions);

如果希望有条件地更新某些属性,则应创建一组更新,然后将它们组合起来:

var update = Builders<Product>.Update;
var updates = new List<UpdateDefinition<Product>>();

updates.Add(update.Set("propertyA", "add A update"));

if ()
    updates.Add(update.Set("propertyX", "add X update"));
else
    updates.Add(update.Set("propertyY", "add Y update"));

updates.Add(update.Set(p => p.PropertyB, "add B update"));

if ()
    updates.Add(update.Set(p => p.PropertyZ, "add Z update"));
else
    updates.Add(update.Set(p => p.PropertyP, "add P update"));

Collection.UpdateOneAsync(filter, update.Combine(updates), updateOptions);

Mongodb相关问答推荐

获取响应周期中的特定键和值

联接不返回具有ObjectId和非ObjectId的结果

如何在mongoDB中按嵌套文档分组( group by )

Mongo 删除最后的文件

无法让 Mongoose.js 子文档数组填充

Stripe:必须提供来源或客户

你如何在 Kubernetes 上设置 Mongo 副本集?

MongoDB .NET 未在 upsert 上生成 _id

MongoDB:设置 Windows 服务

Node.js 和 MongoDB,重用 DB 对象

如何在 Ruby on Rails 环境中使用 Mongoid 进行通配符搜索?

mongo - 如何查询嵌套的 json

如何获取 Mongoid 文档的所有字段名称?

MongoDB 数据库,相当于 SELECT column1, column2 FROM tbl

MongoError: The dollar ($) prefixed field '$push' in '$push' is not valid for storage

pre save和validate之间的mongoose区别?什么时候用哪一个?

无法使用命令写入模式错误,降级到兼容模式

对于社交网站(使用 Ruby on Rails 开发)来说,MongoDB 会是一个好主意吗?

使用 Mongoose ORM 的杀手锏是什么?

Mongodb 查找除一两个条件之外的所有内容