1

group byを使用してクエリを実装する方法を学びたいMongo DB Java 3.x Driverです。コレクションを でグループ化し、結果usernamesを で並べ替えます。countDESC

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を返します。

4

1 に答える 1

1

BasicDBObjectMongo 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));
于 2017-01-10T20:45:10.077 に答える