![](/img/trans.png)
[英]How to make bulk upsert in nested collection in MongoDb C# Driver?
[英]C# MongoDB Update / Upsert List<Object> to Collection
我正在寻找一种方法来更新/更新 MongoDB 中的项目列表到 MongoDB 集合。
有什么办法可以做到还是我必须使用循环来一个一个地更新项目?
PS:问题不是制作一种可以完成工作的方法(一个接一个),但我想避免对 MongoDB 数据库进行过多的迭代。
这是我目前使用的方法:
public static void UpdateAll()
{
var client = new MongoClient("mongodb://server_ip:27017");
var db = client.GetDatabase("M_PROJECT");
var collection = db.GetCollection<Product>("products");
//Config.Products is a List<Product> that was previously retrieved from the same collection in MongoDB
foreach(Product product in Config.Products)
{
var filter = Builders<Product>.Filter.Eq(p => p.ID, product.ID);
var update = Builders<Product>.Update.Set("Name", product.Name).Set("Price", 20);
collection.UpdateOne(filter, update, new UpdateOptions() { IsUpsert = true });
}
}
也许没有指定我想要更新的每个字段/属性,而只是应用类实例。
尝试批量替换,如下所示:
var models = new List<WriteModel<Product>>();
foreach (var product in Config.Products)
{
if (product.ID == null) product.ID = ObjectId.GenerateNewId();
var upsert = new ReplaceOneModel<Product>(
filter: Builders<Product>.Filter.Eq(p => p.ID, product.ID),
replacement: product)
{ IsUpsert = true };
models.Add(upsert);
}
collection.BulkWrite(models);
这里要注意的是,它将用您的产品类实例中的数据完全覆盖存储在数据库中的数据。 但我认为你没问题,因为你说这些产品是从同一个集合中检索的。
这是我的库MongoDB.Entities在内部为实现products.Save()
所做的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.