2012-01-14 2 views
12

MonogoDB가 일괄 처리를 지원하지 않는 것 같습니다. 이 올바른지?MongoDB에 Batch Upsert 추가.

그렇지 않은 경우 가장 효율적인 기존 API를 사용하여 일괄 업서스를 추가하는 방법은 무엇입니까? 일괄 upsert가 mongo db에도 의미가 있습니까?

+0

'일괄 업로드'란 정확히 무엇을 의미합니까? 이미 존재하는 객체를 업데이트 (교체)하는 동안 아직 존재하지 않는 문서를 추가합니까? – mnemosyn

+0

네,하지만 하나의 배치가 아닌 하나씩 배치하십시오! 하나의 문서에 대해 upsert하는 save 메소드와 비슷하지만 일괄 처리에 대해 일괄 처리를 수행 할 수 있음 – iCode

+1

이 스레드가 도움을 제공합니까? http://stackoverflow.com/questions/5143756/upsert-multiple -records-with-mongodb – Bill

답변

2

여기 문서화하여 해당 변경할 수 있습니다

C#을 MongoDB.Driver를 들어
Bulk.find(<query>).upsert().update(<update>); 
Bulk.find(<query>).upsert().updateOne(<update>); 
Bulk.find(<query>).upsert().replaceOne(<replacement>);  
1

나는 다음 사용

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