Java, MongoDB конвертировать курсор в массив

1

Я использую MongoDB с драйвером Java.

Я написал запрос, который находит минимальный год для каждого региона в данных.

Полный код:

public void minYearPerRegion() {
    for (int i = 0; i < uniqueRegions.size(); i++) {
        BasicDBObject query = new BasicDBObject("Region", uniqueRegions.get(i));
        BasicDBObject field = new BasicDBObject("Year", 1)
                                                .append("Region", 1)
                                                .append("Population", 1);


        cursor = coll.find(query,field).sort(new BasicDBObject("Year",1)).limit(1);
        try {
            List<DBObject> documents = new ArrayList<DBObject>();
            for (DBObject dbObject : cursor) {

                DBObject o = cursor.next();
                documents.add(o);
            }
            System.out.println("Document contains: " + documents.size() + " document/s");

        } finally {
            cursor.close();
        }//end finally
    }//end for
}//end minYearPerRegion

Я пытаюсь сохранить мои результаты как отдельные документы, но курсор, кажется, представляет его как объект. Я попытался разделить объект, выполнив следующее:

List<DBObject> documents = new ArrayList<DBObject>();
    for (DBObject dbObject : cursor) {
        DBObject o = cursor.next();
        documents.add(o);
    }
    System.out.println("Document contains: " + documents.size() + " document/s");

Однако в строке печати всегда указывается, что список документов содержит только один документ, когда он должен содержать 4 (так как есть четыре уникальные области).

Скажите, пожалуйста, как получить каждый документ отдельно от курсора и сохранить его в массиве или списке.

Теги:
loops
cursor

2 ответа

1

Вы можете вызвать toArray() который интуитивно возвращает List<DBObject>. Вы возвращаете один документ, потому что вы передали limit(1) курсору.

0

Я нашел решение своей попытки. Проблема заключалась в том, что documents List опустошались каждый раз, когда цикл for выполнялся из-за строки:

List<DBObject> documents = new ArrayList<DBObject>();

Чтобы решить эту проблему, я просто удалил List из цикла for так:

public void minYearPerRegion() {
List<DBObject> documents = new ArrayList<DBObject>(); //<<<<<<<<<<<<<<<<
for (int i = 0; i < uniqueRegions.size(); i++) {
    BasicDBObject query = new BasicDBObject("Region", uniqueRegions.get(i));
    BasicDBObject field = new BasicDBObject("Year", 1)
                                            .append("Region", 1)
                                            .append("Population", 1);


    cursor = coll.find(query,field).sort(new BasicDBObject("Year",1)).limit(1);
    try {

        for (DBObject dbObject : cursor) {

            DBObject o = cursor.next();
            documents.add(o);
        }
        System.out.println("Document contains: " + documents.size() + " document/s");

    } finally {
        cursor.close();
    }//end finally
}//end for
}//end minYearPerRegion

Ещё вопросы

Сообщество Overcoder
Наверх
Меню