2010-10-23 49 views
1

我保存在我的Mongo的数据库中的以下MongoDB的对象:的MongoDB和Java对象

array (
    '_id' => new MongoId("4cc183de48aa4c7708000000"), 
    'vehicleMake' => 'Volkswagen', 
    'vehicleModel' => 'Carrier', 
    'vehicleNumPassengers' => '7', 
    'vehicleReg' => '07-D-748393', 
    'coords' => 
    array (
    0 => 
    array (
     'lat' => '53.2594946', 
     'lng' => '-6.1760780', 
     'timestamp' => '12345678', 
    ), 
    1 => 
    array (
     'lat' => '53.8994946', 
     'lng' => '-6.1460780', 
     'timestamp' => '12345678', 
    ), 
), 
) 

而且在Java中,我可以访问域 'vehicleMake', 'vehicleModel', 'vehicleNumPassengers', 'vehicleReg'细使用下面的代码:

Mongo mongo=new Mongo(); 
DB db=mongo.getDB("garage"); 
DBCollection cllctn=db.getCollection("drivers"); 
DBCursor allDrivers=cllctn.find(); 

while(allDrivers.hasNext()){ 
    DBObject driver=allDrivers.next(); 
    String vehicleMake=driver.get("smsVerified").toString(); 
    String vehicleModel=driver.get("vehicleModel").toString(); 
    String vehicleNumPassengers=driver.get("vehicleNumPassengers").toString(); 
    String vehicleReg=driver.get("vehicleReg").toString(); 
    // 
    //How do I access 'lat', 'lon' and 'timestamp' here???? 
    //  
} 

我的问题是:如何访问MongoDB的阵列内部的“纬度”,“经度”和“时间戳”值?我完全陷入困境,无法在MongoDB网站或谷歌上找到任何东西。

我试着用BasicDBObject搞乱,但似乎无法得到任何工作。

任何帮助非常感谢。

提前许多感谢,

回答

4

你要做的:

BasicDBObject query = new BasicDBObject(); 
query.put("array.lat"); 
collection.find(query); 

做到这一点:

System.out.println(cursor.next().get("coords").get("lat")); 

你也可以选择添加BSONObject转换为它。

编辑:我认为第一种方法是不正确的。你也需要一个价值对。

+0

嗨,回来,谢谢你的回复。我尝试了.get(“coords”)。get(“lat”),但它不起作用。我认为我必须做一个.get(“coords”)来获得一个数组,然后在该数组上使用.get(“lat”)。但我无法弄清楚如何做到这一点...... – Eamorr 2010-10-23 16:07:38

2

@Kaustubh我现在的工作...

BSONObject coords=(BSONObject)driver.get("coords"); 
BSONObject coords_first=(BSONObject) coords.get("0"); 
String lat=coords_first.get("lat").toString(); 
String lng=coords_first.get("lng").toString(); 
System.out.println(lat+"---"+lng); 

诀窍是BSONObject 你正确提及。