2012-01-14 16 views
12

Sembra che MonogoDB non supporti l'upsout di gruppo. È corretto?Aggiunta di batch Upsert a MongoDB.

In caso contrario, come procedere con l'aggiunta di batch upsert con l'API esistente che è la più efficiente? Il batch upsert ha senso per mongo db?

+0

Cosa intendi esattamente per "batch upsert"? Aggiungendo documenti che non esistono ancora, mentre si aggiornano (sostituendo) oggetti già esistenti? – mnemosyn

+0

sì ma come un lotto e NON uno per uno! simile al metodo di salvataggio che esegue l'upsert per un documento ma potrebbe fare un upsout per un batch di documenti – iCode

+1

Questo thread fornisce assistenza: http://stackoverflow.com/questions/5143756/upsert-multiple -records-with-mongodb – Bill

risposta

2

Se si esegue l'aggiornamento a MongoDB 2.6 è possibile usufruire del new Bulk operations:

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

per C# MongoDB.Driver io uso successivo:

 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);