找不到子字段

时间:2015-12-18 19:53:34

标签: java mongodb

我在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值并且它可以正常工作。

2 个答案:

答案 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);
}