我在mongodb
数据库中有这些数据:
{
"_id" : BinData(3, "bU0bX4VEAMnW7AJ28wXcoA=="),
"online" : false,
"money" : 0,
"rank" : "USER",
"ban" : {
"end" : NumberLong("3027259780628"),
"reason" : "hello"
}
}
我使用此代码访问其中保存的ban.end
子字段:
final Document doc = collcetion.find(new Document("_id", myId)).
projection(Projections.include("ban.end"));
System.out.println(doc); // here is all ok.
// It print out the _id with the
// ban and the end values.
final long a = doc.getLong("ban.end"); // nullptr exception because
// I tryied to do this:
long a = (Long) null;
有没有办法解决上面报道的null pointer
?我认为mongodb
失败了,我不确定使用ban.end
作为字段名称。
例如,我已尝试获取money
值并且它可以正常工作。
答案 0 :(得分:0)
getLong
会返回Long
,而非long
。请参阅http://api.mongodb.org/java/current/org/bson/Document.html#getLong-java.lang.Object-。
换句话说,您正在获取nullpointer,因为您隐式地将其取消装箱。只需使用
final long a = doc.getLong("ban.end");
而是分别处理null case。
答案 1 :(得分:0)
可悲的是,你是。您需要先获取我不确定使用“ban.end”作为字段名称。
ban
objcect,然后才能访问其end
属性。
对于任何版本,逻辑都保持不变。
3.0.4
驱动程序的java
版本中的代码
DBCursor docs = collection.find(new BasicDBObject("_id", myId),
new BasicDBObject("ban.end", 1));
while (docs.hasNext())
{
BasicDBObject banObj = (BasicDBObject) docs.next().get("ban");
long end = banObj.getLong("end");
System.out.println(end);
}