sql >> データベース >  >> NoSQL >> MongoDB

MongoDB-すべてのアイテムをループせずにJavaでコレクションをコピーします

    MongoDB 2.6では、集計の結果をコレクションに書き込む$out集計演算子が追加されました。これにより、Javaドライバー(Javaドライバーバージョン2.12.0を使用)を使用して、コレクション内のすべてのアイテムを同じデータベース内の別のコレクションにサーバー側でコピーする簡単な方法が提供されます。

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

    ワンライナーバージョン:

    source.aggregate(Arrays.asList((DBObject)new BasicDBObject("$out", "target")));
    

    ドキュメントによると、大規模なデータセット(> 100MB)の場合、allowDiskUseオプション(集約メモリ制限)を使用することをお勧めしますが、> 2GBのコレクションで実行したときにその制限に達していないため、適用されない場合がありますこの特定のパイプラインに、少なくとも2.6.0では。



    1. redisサーバーを停止します。シャットダウンも停止も機能しません

    2. 複数のフィールドで同時にMongodb集計(カウント)

    3. Redisのソート済みセットで部分的なキー名を使用して値を検索する

    4. Celery/Redisの同じタスクが複数回並行して実行されている