9

我正在尝试使用光标遍历文档,我想将它们存储在一个列表中,然后返回一个 DBOject 类型的列表。

这是我正在尝试的:

public List<DBObject> getResultsInDescendingOrderByDate(int limit) {

        List<DBObject> myList = null;
        DBCursor myCursor=myCollection.find().sort(new BasicDBObject("date",-1)).limit(10);
        try {
        while(myCursor.hasNext()) {

                System.out.print(myCursor.next());
               myList.add(new BasicDBObject("_id",(String) myCursor.curr().get("_id"))
                        .append("title",(String) myCursor.curr().get("title"))
                        .append("author",(String) myCursor.curr().get("author"))
                        .append("permalink",(String) myCursor.curr().get("permalink"))
                        .append("body",(String) myCursor.curr().get("body"))
                        .append("comment",new BasicDBObject("comments",(String) myCursor.curr().get("comments")))
                                .append("tags",new BasicDBObject("tags",(String) myCursor.curr().get("tags"))
                                .append("date",(Date) myCursor.curr().get("date"))));
                myCursor.next();
            }
        }

        finally {
            myCursor.close();
        }


        return myList;
    }

我不知道如何将数据类型转换为游标的原始形式。我尝试搜索,但没有任何线索。

请帮忙。

谢谢

4

3 回答 3

16

@sdanzig 解决方案将起作用,但是......如果您想输入更少的代码,您可以这样做:

public List<DBObject> getResultsInDescendingOrderByDate(int limit) {

        List<DBObject> myList = null;
        DBCursor myCursor=myCollection.find().sort(new BasicDBObject("date",-1)).limit(10);
        myList = myCursor.toArray();

        return myList;
    }

DBCursor的DBCursor.toArray()方法返回一个 List

于 2013-12-26T21:49:58.630 回答
6

对于您要执行的操作,无需阅读各个字段。你必须初始化你的列表。另外,您在 print 语句中调用了 next() 两次。您可以只使用 next() 的返回值,而不是调用 curr()。哦,有人正确地建议你应该传入“限制”参数而不是使用 10,除非这是故意的:

public List<DBObject> getResultsInDescendingOrderByDate(int limit) {
    List<DBObject> myList = new ArrayList<DBObject>();
    DBCursor myCursor=myCollection.find().sort(new BasicDBObject("date",-1)).limit(limit);
    try {
        while(myCursor.hasNext()) {
            myList.add(myCursor.next());
        }
    }
    finally {
        myCursor.close();
    }
    return myList;
}
于 2013-10-25T04:09:46.570 回答
1

就我而言,我正在使用Documents

List<Document> employees = (List<Document>) collection.find().into(
                new ArrayList<Document>());
于 2018-06-18T23:46:42.583 回答