2012-01-14 91 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);