在 MongoDB c# 驱动程序(2.0+)中,我们可以在执行和 updateManyAsync 时执行 upsert 吗?这个例子对 UpdateOne 有帮助,但我正在寻找适用于 updateMany 的东西。
问问题
16894 次
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 回答