我想拥有从MongoDB集合中插入和获取对象的通用方法。对于所有mongo db操作,我使用的是Jongo库。这是我的代码:
public UserModel getUserByEmailId(String emailId) {
String query = "{emailId:'"+emailId+"'}";
Object obj = storage.get(query);
UserModel user = (UserModel) obj;
//getting exception on above line. I am sure that I have UserModel
//type of data in obj
// Exception is: java.lang.ClassCastException: Cannot cast java.util.LinkedHashMap to UserModel
return user;
}
这是“storage.get(String query)”方法。我的目的是有一个从mongo db读取数据的常用方法。这就是我希望它返回Object的原因。 (如果我错了,请随意评论)
public Object get(String query) {
Object obj = collection.findOne(query).as(Object.class);
return obj;
}
//Here: collection is my "org.Jongo.MongoCollection" type object.
从“Object”获取UserModel类型对象的正确方法是什么?如果您需要更多信息,请告诉我
答案 0 :(得分:0)
Jongo图书馆正在返回一张地图,特别是LinkedHashMap
。您正在尝试将其转换为您的UserModel
类的实例,Java不知道该怎么做。
您似乎期待Jongo库返回UserModel
。假设这是您自定义设计的类,则库无法知道如何将MongoDB中的数据映射到此对象。当然,除非你能以某种方式特别指示它这样做(我不熟悉Jongo)。
但是,您可以使用Jackson将地图映射到UserModel
(或其他对象)。
答案 1 :(得分:0)
如果您只需要将文档映射到UserModel对象
collection.findOne("{name:'John'}").as(UserModel.class);
如果您正在寻找通用方法:
public <T> T get(String query, Class<T> clazz) {
return collection.findOne(query).as(clazz);
}
...
UserModel user = this.get("{name:'John'}", UserModel.class);