gpt4 book ai didi

java - 解析 AggregationOutput mongo java 驱动程序

转载 作者:可可西里 更新时间:2023-11-01 09:56:40 26 4
gpt4 key购买 nike

我有一个返回 3 个结果的聚合

{ "serverUsed" : "/127.0.0.1:27017" , "result" : [ { "_id" : "luke" , "times" : 56} , { "_id" : "albert" , "times" : 28} , { "_id" : "matt" , "times" : 28}] , "ok" : 1.0}

然而,当我尝试遍历结果时,代码进入了无限循环(不明白为什么!!)

AggregationOutput output = coll.aggregate( match1, unwind, match2, group, sort, limit);

Iterable<DBObject> list= output.results();
while(list.iterator().hasNext()){

String id = (String) list.iterator().next().get("_id");
int times = Integer.parseInt(list.iterator().next().get("times").toString());

System.out.println("ID IS "+id+" time: "+times);
}

同时输出重复第一个结果:

ID IS luke time: 56
ID IS luke time: 56
ID IS luke time: 56
ID IS luke time: 56
ID IS luke time: 56
...

我真的不明白为什么这次迭代不起作用。请帮忙!

最佳答案

每次访问 DBObject 中的字段时,您似乎都在使用新的迭代器,即您在循环中多次使用 list.iterator()list.iterator().next() 返回集合中的第一个元素。因此,您最终访问了第一个 DBObject

试试这个:

Iterable<DBObject> list= output.results();
while(list.iterator().hasNext()){
DBObject obj = list.iterator().next();
String id = obj.get("_id");
int times = Integer.parseInt(obj.get("times").toString());

System.out.println("ID IS "+id+" time: "+times);
}

或者也许使用 foreach 循环:

for (DBObject obj : output.results()) {
String id = obj.get("_id");
int times = Integer.parseInt(obj.get("times").toString());
System.out.println("ID IS "+id+" time: "+times);
}

关于java - 解析 AggregationOutput mongo java 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591523/

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