Mongo无法将Hashmap强制转换为BasicDBObject

时间:2015-09-28 11:27:17

标签: java json mongodb

我一直致力于开发一个java程序,该程序利用Mongo数据库根据地理坐标存储有关飞机的某些数据。应用程序正在努力收集信息并以正确的方式填充模型对象。

当我尝试将对象发送到mongo数据库时,我收到以下错误:java.lang.ClassCastException: java.util.hashmap cannot be cast to com.mongodb.basicDbObject.此异常的问题:我没有HashMap(或任何类型的Map)< / p>

要将对象添加到数据库,请使用以下代码:

DBCollection table = db.getCollection(GRID_NAME);
GridCell c = cell.getCell(true);
String jString = (String) mapper.writeValueAsString(c); //mapper is a Jackson ObjectMapper
System.out.println(jString);
table.insert((BasicDBObject) JSON.parse(jString));

在这里,网格单元格包含两个浮点数和一个平面对象列表。平面对象包含一个字符串和另外10个双精度值。除此之外,类只有所有变量的基本getter和setter。

栅格单元

private float lat;
private float lng;
private List<Plane> planeList;

平面

private String identiefier;
private double minHeight;
private double maxHeight;
private double avgHeight;
private double minSpeed;
private double maxSpeed;
private double avgSpeed;
private double minCourse;
private double maxCourse;
private double avgCourse;

一个吸气剂和二传手(所有看起来或多或少都与这两个相同)

public float getLng() {
    return lng;
}

public void setLng(float lng) {
    this.lng = lng;
}

正如您在上面所看到的,我将json字符串打印到控制台以检查它是否正确。我不得不承认我的普通json阅读技巧充其量是狡猾的。但我无法在此找到一个哈希图:

{"lat":28.0,"lng":5.0,"planeList":[{"identifier":"myTestPlane","minHeight":1.0,"maxHeigh":2.0,"avgHeight":1.5,"minSpeed":1.0,"maxSpeed":2.0,"avgSpeed":1.5,"minCourse":1.0,"maxCourse":2.0,"avgCourse":1.5}]}

我有什么想法或建议我做错了什么?我可能有一个星期一早上的时刻,但我真的无法弄清楚。

2 个答案:

答案 0 :(得分:3)

你正在使用&#34;错误&#34; JSON库。

如果你想要MongoDB的DBObject,你可以使用com.mongodb.util.JSON

import com.mongodb.util.JSON;

DBObject bson = ( DBObject ) JSON.parse( json );

如果您有来自其他地方的现有地图,您也可以尝试将new BasicDBObject()putAll数据加入其中。

答案 1 :(得分:0)

请注意,不推荐使用DBObject,鼓励使用Document:http://mongodb.github.io/mongo-java-driver/3.1/bson/documents/