Mongodb Mongo DB Java 3.x驱动程序-按查询分组

Mongodb Mongo DB Java 3.x驱动程序-按查询分组,mongodb,mongodb-query,mongo-java,mongo-java-driver,Mongodb,Mongodb Query,Mongo Java,Mongo Java Driver,我想学习如何使用mongodbjava3.x驱动程序实现groupby查询。我想通过用户名对我的收藏进行分组,并根据结果的计数对结果进行排序DESC 下面是我想要实现的shell查询Java等价物: db.stream.aggregate({ $group: {_id: '$username', tweetCount: {$sum: 1} } }, { $sort: {tweetCount: -1} } ); 下面是我实现的Java代码: BasicDBObject groupFields =

我想学习如何使用
mongodbjava3.x驱动程序实现
groupby
查询。我想通过
用户名对我的收藏进行分组,并根据
结果的
计数对结果进行排序
DESC

下面是我想要实现的shell查询
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);
basicdbobjectgroupfields=新的BasicDBObject(“\u id”,“用户名”);
//计算结果并存储到countOfResults中
groupFields.put(“countOfResults”,新的BasicDBObject($sum),1));
BasicDBObject group=新的BasicDBObject(“$group”,groupFields);
//按countOfResults DESC对结果进行排序
BasicDBObject sortFields=新的BasicDBObject(“结果计数”,-1);
BasicDBObject排序=新的BasicDBObject(“$sort”,sortFields);
Listpipeline=new ArrayList();
管道。添加(组);
管道。添加(排序);
AggregateTableoutput=collection.aggregate(管道);

我需要的结果是按
username
分组的文档数
countOfResults
返回集合拥有的文档的总数。

您应该尽量不要在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));
导入静态com.mongodb.client.model.累加器。*;
导入静态com.mongodb.client.model.Aggregates.*;
导入静态java.util.Arrays.asList;
Bson组=组(“$username”,总和(“tweetCount”,1));
Bson sort=sort(新文档(“tweetCount”,-1));
AggregateIterable输出=collection.aggregate(asList(group,sort));