gpt4 book ai didi

java - mongodb 3 java : aggregation sum of keys

转载 作者:行者123 更新时间:2023-12-02 13:32:58 28 4
gpt4 key购买 nike

我有一个包含 _id 和 searchKey 的集合。我想知道每个存储键的计数,例如“java 2,C++ 3”。我的实体是

public class SearchKeyModel implements Serializable {

private static final long serialVersionUID = 2099119595418807689L;

private String searchKey;
private Integer count;

这样聚合:

Iterator<Document> sortedList = collection
.aggregate(Arrays.asList(new Document("$match", new Document("searchKey", 1)),
new Document("$sort", new Document("count", -1)),
new Document("$group", new Document("_id", null).append("count", new Document("$sum", 1)
))
)).iterator();

System.out.println("list hasNext " + sortedList.hasNext());

while (sortedList.hasNext()) {
Document doc = sortedList.next();
SearchKeyModel entity = gson.fromJson(doc.toJson(), SearchKeyModel.class);
list.add(entity);
}
System.out.println("list size is " + list.size());

但是sortedList.hasNext()总是错误的。

任何人都可以帮助理解如何完成这个吗?

最佳答案

您可以尝试以下聚合以获得所需的结果。

添加了 $project 阶段,以获取与 Java 类字段名称相同的键名称的输出,以便 Gson 正确映射它们。

我还更改了查询以使用静态辅助方法。

List<Bson> aggregation = Arrays.asList(
Aggregates.group("$searchKey", Accumulators.sum("count", 1)),
Aggregates.sort(Sorts.descending("count")),
Aggregates.project(Projections.fields(Projections.excludeId(), Projections.computed("searchKey", "$_id"), Projections.include("count"))));

Iterator<Document> sortedList = collection.aggregate(aggregation).iterator();

关于java - mongodb 3 java : aggregation sum of keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43118886/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com