2010-10-23 52 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 你正確提及。