我正在尝试使用游标迭代文档,我想将它们存储在列表中,然后返回类型为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;
}
我不知道如何将数据类型转换为光标中的原始数据类型。我试着搜索,但没有线索。
请帮忙。
由于
答案 0 :(得分:14)
@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
答案 1 :(得分:5)
对于您要做的事情,无需阅读各个字段。您必须初始化列表。另外,你在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;
}
答案 2 :(得分:1)
就我而言,我正在使用Documents:
List<Document> employees = (List<Document>) collection.find().into(
new ArrayList<Document>());