Java、MongoDB 将游标转换为数组

标签 java mongodb loops cursor

我正在将 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 个文档(因为有 4 个唯一区域)。

请告诉我如何从光标处单独获取每个文档并将其存储在数组或列表中。

最佳答案

您可以调用toArray()直观地,它返回 List<DBObject> 。您将收到一份文档,因为您通过了 limit(1)到光标。

关于Java、MongoDB 将游标转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25247822/

相关文章:

mongodb - 在 MongoDB 中,如何安全地删除包含空数组的文档?

Mongodb 无法在 Ubuntu 上运行 -> mongod.service : Failed with result 'exit-code'

java - 如何为 Android 中所有单选按钮组中的所有单选按钮设置背景

java - 无论如何,将空值排序到底部的好通用方法?

javascript - Mongoose 响应无法正确解析

java - 批量更新 Oracle 中的表

javascript - 如何在 Angular 中使用 splice 从列表中删除项目?

excel - 如何在循环中为不同范围编写两个 IF 语句,VBA

java - 如何从java中的hashmap中删除字符串数组值?

java - 如何配置 log4j2 Web 应用程序