既存のコレクションを同じデータベース内の新しいコレクションにコピーしようとしています。シェル内で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でこれを行う方法はありますか?
コピーサーバー側を引き起こす他の方法はありますか?
おかげ
を私はドン場合、私はまだ」、ターゲットコレクションの変更を見ていませんよ以前はターゲットコレクションを作成していませんでしたが、コマンドラインでその名前の空のコレクションも表示されず、 'client.getDatabase(" db ")。getCollection(" target ")。count()'は0を返します。 *これは構成iである可能性がありますssue?、集約オペレーションを有効にするために必要なことはありますか?** –
設定は必要ありません。集約は、そのままの状態で行われます。検索クエリを実行し、出力を印刷して、接続とdbコレクションが正しいかどうかを確認してください。私のマシンでそのまま動作します。 – JayKrish
クイックレスポンスのおかげで:)。 foreach(noOp); 'ここで' noOP'は何もしない 'Block'です。これはprintBlock [ documentaton](http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/aggregation/)にありますが、正常に動作しますが、そのまま残しておけば、何もしません。 –