2017-02-15 5 views
1

既存のコレクションを同じデータベース内の新しいコレクションにコピーしようとしています。シェル内でdb.source.aggregate({"$out":"target"});という動作をエミュレートしています。古いのMongoDBのバージョンとJavaドライバでjavaドライバ(v3.4)でmongodbコレクションをコピーする方法

here見られるように)、それを行うことが可能であった:

// set up pipeline 
List<DBObject> ops = new ArrayList<DBObject>(); 
ops.add(new BasicDBObject("$out", "target")); // writes to collection "target" 

// run it 
MongoClient client = new MongoClient("host"); 
DBCollection source = client.getDB("db").getCollection("source") 
source.aggregate(ops); 

が、モンゴ3.0.0以来、the writers are moving away fromDBCollectionとそうでないMongoCollectionなどへ特に.aggregate(List<DBObject>)の同じ機能を持っています。

は、私がどんな効果を持っていたいずれも、次のオプションを、試してみた:

List<Bson> ops = new ArrayList<>(); 
ops.add(new BasicDBObject("$out", "target")); 
//OR 
ops.add(new Document("$out", "target")); //not at the same time as above 

MongoClient client = new MongoClient("host"); 
MongoCollection source = client.getDatabase("db").getCollection("source"); 
source.aggregate(ops); 

は悲しいことに、私はこれを把握するだけでなく、十分な集計操作を理解していません。

javaドライバとmongo 3.4でこれを行う方法はありますか?
コピーサーバー側を引き起こす他の方法はありますか?

おかげ

答えて

2

あなたはこれを試すことができます。

MongoClient client = new MongoClient("host"); 
MongoCollection source = client.getDatabase("db").getCollection("source");  
source.aggregate(Arrays.asList(out("<OutputcollectionName>"))); 

は、次のimport文を使用します。

import static com.mongodb.client.model.Aggregates.*; 
+0

を私はドン場合、私はまだ」、ターゲットコレクションの変更を見ていませんよ以前はターゲットコレクションを作成していませんでしたが、コマンドラインでその名前の空のコレクションも表示されず、 'client.getDatabase(" db ")。getCollection(" target ")。count()'は0を返します。 *これは構成iである可能性がありますssue?、集約オペレーションを有効にするために必要なことはありますか?** –

+0

設定は必要ありません。集約は、そのままの状態で行われます。検索クエリを実行し、出力を印刷して、接続とdbコレクションが正しいかどうかを確認してください。私のマシンでそのまま動作します。 – JayKrish

+2

クイックレスポンスのおかげで:)。 foreach(noOp); 'ここで' noOP'は何もしない 'Block 'です。これはprintBlock [ documentaton](http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/aggregation/)にありますが、正常に動作しますが、そのまま残しておけば、何もしません。 –

関連する問題