我正在用 Java 编写一个程序,它从 MongoDB 读取查询结果。
下面是代码(给出了一个异常(exception)):
if(output != null){
BasicDBObject whereQuery = new BasicDBObject();
DBCursor cursor = null;
for (DBObject obj : output.results()) {
String UserID = obj.get("UserID").toString();
whereQuery.put("User_ID", UserID);
cursor = users.find(whereQuery);
System.out.println(cursor.toString());
System.out.println("This user name who tweeted "+ cursor.next());
}
}
当我运行这段代码时,在最后一行使用 sysout 语句仅打印光标的第一个值,来自“for”循环的第二个值导致异常。想知道为什么吗?
cursor.next() 之前的 sysout 语句始终打印游标中的当前值,将其放置在那里以验证游标是否确实有值。
我已经为 cursor.next() 尝试了 hasNext() while 循环,它只在第一次进入循环时才跳出其余的检查。
Error stack trace:
Exception in thread "main" java.util.NoSuchElementException
at com.mongodb.QueryResultIterator.next(QueryResultIterator.java:111)
at com.mongodb.DBCursor._next(DBCursor.java:510)
at com.mongodb.DBCursor.next(DBCursor.java:581)
at ReadData.referencedDataModel(ReadData.java:97)
at ReadData.main(ReadData.java:131)
最佳答案
我不确定这是你的答案,但值得一试:
String UserID = obj.get("UserID").toString();
cursor = users.find(whereQuery);
if(cursor.hasNext()) {
// the object will be your object, its basically a json document
BasicDBObject obj = cursor.next();
// print obj to console as json file
System.out.println(obj);
// you can get any property with obj.get...(); method such as .getString()
// The below code will extract the User_ID from the object you received via find query
string id = obj.getString("User_ID");
}
如果您确定结果只有一个文档,您可以使用此代码:
BasicDBObject obj = users.findOne(whereQuery);
关于 java 和 Mongo 的非常有用的资源:
http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/
关于java - cursor.next() 总是返回 "java.util.NoSuchElementException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498459/