4

在 MongoDB c# 驱动程序(2.0+)中,我们可以在执行和 updateManyAsync 时执行 upsert 吗?这个例子对 UpdateOne 有帮助,但我正在寻找适用于 updateMany 的东西。

4

4 回答 4

4
UpdateDefinition<Phone> updateDefinition = Builders<Phone>.Update.Set(x => x.Name, "Updated Name");
MongoDb.GetCollection<Phone>("Phone").UpdateOne(x => x._id == "foo", updateDefinition); // replaces first match
MongoDb.GetCollection<Phone>("Phone").UpdateMany(x => x.SomeProp == 5, updateDefinition); // replaces all matches

假设你有一堂课:

class Phone
{
    public string _id {get; set;} // this is the primary key because Mongo uses _id as primary key
    public string Name {get;set;}
    public int SomeProp {get;set;}

    // etc...
 }
于 2019-09-28T03:26:40.123 回答
4

这是在 C# .Net 核心中使用 UpdateMany 的更完整示例:

BostadsUppgifterMongoDbContext context = new BostadsUppgifterMongoDbContext(_configuration.GetConnectionString("DefaultConnection"), _configuration["ConnectionStrings:DefaultConnectionName"]);
var residenceCollection = context.MongoDatabase.GetCollection<Residence>("Residences");
residenceCollection.UpdateMany(x =>
    x.City == "Stockholm",
    Builders<Residence>.Update.Set(p => p.Municipality, "Stoholms län"),
    new UpdateOptions { IsUpsert = false }
);

如果IsUpsert设置为 true,如果没有找到匹配项,它将插入一个文档。

于 2019-02-15T08:28:50.803 回答
0

Upsert 在使用updateMany时也能正常工作:

var options = new UpdateOptions { IsUpsert = true };
var result = await collection.UpdateManyAsync(filter, update, options);
于 2015-12-14T21:53:06.873 回答
-1

TModel 是你的模型

var updateBuilder = new UpdateDefinitionBuilder<TModel>();
yourContext.UpdateMany(filterExpression, update.Set(updateExpression, updateValue));
于 2019-08-19T17:47:07.637 回答