0

我想要从 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(字符串查询)”方法。我的意图是使用通用方法从 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.

从“对象”获取 UserModel 对象类型的正确方法是什么?如果您需要更多信息,请与我们联系

4

2 回答 2

0

Jongo 库正在返回一个地图,特别是一个LinkedHashMap. 您正试图将其转换为您的UserModel类的一个实例,而 Java 不知道该怎么做。

您似乎期望 Jongo 库返回一个UserModel. 假设这是您自定义设计的类,那么库无法知道如何将数据从 MongoDB 映射到该对象。当然,除非您可以以某种方式明确指示它这样做(我不熟悉 Jongo)。

但是,您可以使用Jackson将地图映射到UserModel(或其他对象)。

于 2014-04-03T17:47:37.317 回答
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);
于 2014-04-04T09:04:33.063 回答