C#MongoDB驱动程序 - 如何使用UpdateDefinitionBuilder?

Lir*_*man 4 mongodb mongodb-.net-driver

我查找了一种使用mongodb的方法,UpdateDefinitionBuilders文档并没有真正显示出来......

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

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);
Run Code Online (Sandbox Code Playgroud)

但它给出了编译错误:

cannot convert from UpdateDefinitionBuilder UpdateDefinition

我看了,但找不到解决方法如何使用它 UpdateDefinitionBuilders

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

And*_*nov 9

如果您只需更新多个属性,则可以Set在更新构建器上调用,然后对Set扩展方法进行后续调用.您可以使用lambda表达式或属性名称.

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

collection.UpdateOneAsync(filter, update, updateOptions);
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)