Совокупный вывод не отображается правильно в mongoDB [duplicate]

Удаление ветвей

Предположим, что наша работа над веткой «контакт-форма» выполнена, и мы уже интегрировали ее в «master». Поскольку это нам больше не нужно, мы можем удалить его (локально):

$ git branch -d contact-form
blockquote>

И для удаления удаленной ветви:

git push origin --delete contact-form

2
задан nuvio 23 March 2013 в 22:09
поделиться

3 ответа

Кажется, что вы используете новый итератор каждый раз, когда вы обращаетесь к полю в 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);
}
6
ответ дан tenorsax 28 August 2018 в 04:38
поделиться

Один из возможных недостатков вашего кода заключается в том, что вы вызываете метод Iterator.next () несколько раз. Сохраните его значение в переменной и используйте переменную вместо вызова несколько раз.

Например:

DBObject obj = list.iterator().next();
String id = (String) obj.get("_id"); 

int times = Integer.parseInt(obj.get("times").toString());`
1
ответ дан assylias 28 August 2018 в 04:38
поделиться

Я знаю, это старый поток, и на него уже ответили, но ответы - это оптимизация. Фактическая причина , почему вы получаете повторяющиеся ответы, заключается в том, что каждый раз, когда вы запрашиваете .iterator (), он возвращает обратно объект итератора, который начинается с верхней части списка.

Поэтому условие while while:

list.iterator().hasNext()

всегда будет возвращать true. Соответственно, последующий

list.iterator().next()

всегда будет возвращать первый элемент.

Что должно быть сделано:

AggregationOutput output = coll.aggregate( match1, unwind, match2, group, sort, limit);
Iterable<DBObject> list= output.results();
Iterator<DBObject> iterator= list.iterator();

while(iterator.hasNext()){
    DBObject obj = iterator.next();

    String id = (String) obj.get("_id");
    int times = Integer.parseInt(obj.get("times").toString());

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

Но технически, для цикла, упомянутого @Aqua, много более чистого использования. Этот ответ заключался лишь в том, чтобы разъяснить, почему, а не как.

3
ответ дан subdigit 28 August 2018 в 04:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: