2012-07-30 100 views
1

我想用java存儲緯度的簡單數組,經度MongoDB的內部集合,我使用下面的代碼,但我的「祿」陣列始終是空的:如何在MongoDB中存儲數組?

BasicDBObject doc = new BasicDBObject(); 
//doc.put("key " , r.getKey()); 
doc.put("category" , r.getKey()); 
doc.put("type" , r.getValue()); 

BasicDBObject latlon = new BasicDBObject(); 


ArrayList<Float> aLatLong = new ArrayList<Float>(); 

{ 




    Float fLat = Float.parseFloat(r.getLatitude()); 
    Float fLon = Float.parseFloat(r.getLongitude()); 
    aLatLong.add(fLat); 
    aLatLong.add(fLon); 

    latlon.put("lat" , fLat); 
    latlon.put("lon" , fLon); 
} 


doc.put("loc" , aLatLong); 

,但是當我不使用ArrayList根本不想將latlon儲存到「loc」中,它會顯示數據,但它不再是數組。

如何在mongoDB中保存簡單的數組?

回答

2

試試這個

BasicDBObject doc = new BasicDBObject(); 
//doc.put("key " , r.getKey()); 
doc.put("category" , r.getKey()); 
doc.put("type" , r.getValue()); 

java.util.Map<String,Float> latLongMap = new java.util.HashMap<String,Float>(); 
latLongMap.put("lat" , Float.parseFloat(r.getLatitude()); 
latLongMap.put("lon" , Float.parseFloat(r.getLongitude()); 

doc.put("location" , latLongMap); 

這將存儲LAT-長的JSON。此外,如果你想將它們存儲爲數組,那也是可能的,但我會建議你將它們存儲爲這個。

1

所有你需要做的是這樣的:

BasicDBObject doc = new BasicDBObject(); 

doc.put("category" , r.getKey()); 
doc.put("type" , r.getValue()); 

List<Float> aLatLong = new ArrayList<Float>(); 

Float fLat = Float.parseFloat(r.getLatitude()); 
Float fLon = Float.parseFloat(r.getLongitude()); 
aLatLong.add(fLat); 
aLatLong.add(fLon); 

doc.put("loc" , aLatLong); 

現在使用的MongoDB的插入方法來保存DBOBJECT。

+0

BasicDBObject內部知道如何序列化Iterable的任何實例(因此List被正確地序列化並存儲在mongo中) – Byter 2012-07-30 12:51:51

+0

我在上面的例子中做了同樣的事情!也我複製你的代碼片段到我的代碼,它不起作用 – 2012-07-30 12:54:02

+0

所以是在你嘗試代碼後mongo數據庫中的數組是空的嗎? – Byter 2012-07-30 12:58:19