2017-01-10 15 views
1

Mongo DB Java 3.x Driver을 사용하여 group by 쿼리를 구현하는 방법을 배우고 싶습니다. 내 컬렉션을 usernames을 통해 그룹화하고 결과가 DESCcount으로 정렬하고 싶습니다.Mongo DB Java 3.x 드라이버 - 그룹화 쿼리

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

내가 구현 한 Java 코드입니다 : 여기

내가 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

Mongo 3.x에서 이전 객체 (BasicDBObject) 유형을 사용하지 마십시오. 이런 식으로해볼 수 있습니다.

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