2012-01-14 113 views
12

它看起来像MonogoDB不支持批量upsert。它是否正确?将批量插入添加到MongoDB。

如果不是,你会如何去添加批处理upsert与现有的API是最有效的?批量upsert甚至对mongo db有意义吗?

+0

“批量upsert”是什么意思?在更新(替换)已存在的对象时添加尚不存在的文档? – mnemosyn 2012-01-14 13:31:20

+0

是的,但作为一个批次,而不是一个一个!类似于保存方法,它可以插入一个文档,但它可以批量插入一批文档 – iCode 2012-01-15 00:17:32

+1

此线程是否为您提供帮助: http://stackoverflow.com/questions/5143756/upsert-multiple -records-with-mongodb – Bill 2012-01-19 18:19:02

回答

2

如果升级到MongoDB的2.6你可以采取new Bulk operations的优势:

Bulk.find(<query>).upsert().update(<update>); 
Bulk.find(<query>).upsert().updateOne(<update>); 
Bulk.find(<query>).upsert().replaceOne(<replacement>);  
1

对于C#MongoDB.Driver我用下一个:

 var writeModels = new List<WriteModel<T>>(); 
     foreach (var entity in list) 
     { 
      var id = entity.Id; 
      if (id == null) 
      { 
       writeModels.Add(new InsertOneModel<T>(entity)); 
      } 
      else 
      { 
       var filter = new ExpressionFilterDefinition<T>(x => x.Id == id); 
       var replaceModel = new ReplaceOneModel<T>(filter, entity); 
       writeModels.Add(replaceModel); 
      } 
     } 
     await getCollection().BulkWriteAsync(writeModels);