2017-01-10 9 views
1

Mongo DB Java 3.x Driverを使用してgroup byクエリを実装する方法を学習したいと思います。私はusernamesを通して私のコレクションをグループ化し、結果のcountによって結果を並べ替えるといいです。DESCここでMongo DB Java 3.xドライバ - グループ化クエリ

は私がJava同等のものを実装したいシェルクエリである:ここで

db.stream.aggregate({ $group: {_id: '$username', tweetCount: {$sum: 1} } }, { $sort: {tweetCount: -1} }); 

は、私が実装したJavaコードは次のとおりです。

BasicDBObject groupFields = new BasicDBObject("_id", "username"); 

// count the results and store into countOfResults 
groupFields.put("countOfResults", new BasicDBObject("$sum", 1)); 
BasicDBObject group = new BasicDBObject("$group", groupFields); 


// sort the results by countOfResults DESC 
BasicDBObject sortFields = new BasicDBObject("countOfResults", -1); 
BasicDBObject sort = new BasicDBObject("$sort", sortFields); 

List <BasicDBObject> pipeline = new ArrayList <BasicDBObject>(); 
pipeline.add(group); 
pipeline.add(sort); 

AggregateIterable <Document> output = collection.aggregate(pipeline); 

私は必要な結果がのカウントですドキュメントはusernameでグループ化されています。 countOfResultsは、コレクションに含まれているドキュメントの総数がであるを返します。

答えて

1

古いオブジェクト(BasicDBObject)をMongo 3.xで使用しないでください。このようなことを試すことができます。

import static com.mongodb.client.model.Accumulators.*; 
import static com.mongodb.client.model.Aggregates.*; 
import static java.util.Arrays.asList; 

Bson group = group("$username", sum("tweetCount", 1)); 
Bson sort = sort(new Document("tweetCount", -1)); 
AggregateIterable <Document> output = collection.aggregate(asList(group, sort));