2012-01-14 19 views
12

MonogoDBはバッチアップサルトをサポートしていないようです。これは正しいです?MongoDBに一括アップロードを追加する。

もしそうでなければ、最も効率的な既存のAPIを使ってバッチupsertを追加する方法はありますか?バッチupsertはmongo dbにも意味がありますか?

+0

「バッチアップ」ってどういう意味ですか?既存のオブジェクトを更新(置換)しながら、まだ存在しないドキュメントを追加しますか? – mnemosyn

+0

はい、ただし1つのバッチとして、1つずつではありません! 1つのドキュメントに対してupsertするsaveメソッドに似ていますが、ドキュメントバッチのバッチアップサットを行うことができます – iCode

+1

このスレッドはあなたに支援を提供しますか: http://stackoverflow.com/questions/5143756/upsert-multiple -records-with-mongodb – Bill

答えて

1

upsertフラグを持つmongoimportというユーティリティがあります。何かのように

mongoimport -c myitems -d mydb --upsert items.json 

これはおそらくあなたが探しているものを達成することができますか?

デフォルトは_idに基づいてアップサートすることですが、あなたはMongoDBの2.6にアップグレードする場合は、ここで

http://docs.mongodb.org/manual/reference/mongoimport/#cmdoption-mongoimport--upsertFields

2

文書--upsertFieldsフラグを使用すると、あなたがnew Bulk operationsの利点を取ることができることを変更することができます。

私は次の使用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); 
関連する問題