2012-07-30 88 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