2016-04-12 1 views
0

私はJavaコードに変換する必要があるこのmongoシェルコマンドを持っています。 ドライバーAPIが頻繁に変更されるように見えるため、オンラインで表示される例ではこのメソッドは使用されません。最新の3.2.4バージョンのドライバを使用しています。Java MongodbのAggregateToCollectionOperationクラスの使用方法は?

db.ff1987_2gram.aggregate([ 
    { 
     $group: { 
      _id : { 
       "cw1" : "$cw1", 
       "target" : "$target" 
      }, 
      "count" : {"$sum" : 1 } 
     } 
    }, 
    {$out : "ff1987_2gram_c"} 
], { allowDiskUse:true}) 

https://api.mongodb.org/java/3.2/com/mongodb/operation/AggregateToCollectionOperation.html私がしたいことがあります。しかし、そのexecuteメソッドはWriteBindingインターフェイスオブジェクトを取ります。これは、ClusterBinding、SingleServerBindingによって実装されます。しかし、私はこれらのいずれかを使用していません。新しいMongoClientクラスを使用してデータベースに接続しました。

答えて

0

これは私の元の質問には答えませんが、次はまともな回避策です。 MongoClientが導入されて以来、これは廃止されたクラスだと思います。

AggregateToCollectionOperationを使用する代わりに、mongoシェルコマンドの場合と同様に、$ outを持つステージのいずれかを使用して通常の集約操作を使用します。ただし、返されるイテレートを反復しない限り、コマンドは実際には実行されません。 (それが最初の要素の後で壊れていれば十分かもしれません。以下の例。

List<Document> pipeline = new ArrayList<>(); 
... 
Document group = new Document("$group", groupargs); 
pipeline.add(group); 
... 
//Relevant line 
pipeline.add(new Document("$out", collectionname)); 
AggregateIterable<Document> docs = db.getCollection(collection).aggregate(pipeline).allowDiskUse(true); 
for (Document d : docs) {} 
関連する問題