尝试从Mongo读取数组并将其放入Java对象

尝试从Mongo读取数组并将其放入Java对象,java,list,mongodb,Java,List,Mongodb,我在Mongo中有一个数组,我正试图将其放入列表中 这是我的 BasicDBList computerList = new BasicDBList(); if (dbObj.get("computers") != null){ computerList = (BasicDBList) dbObj.get("computers"); } for (Object obj : computerList) {

我在Mongo中有一个数组,我正试图将其放入列表中

这是我的

BasicDBList computerList = new BasicDBList(); 
        if (dbObj.get("computers") != null){
            computerList =  (BasicDBList) dbObj.get("computers");
        }
        for (Object obj : computerList) { 
            System.getComputers().add((Computer) obj);
        }
我有一个主
系统
对象,其中有一个列表,这就是我在这里尝试从Mongo中检索
计算机
,并返回到dataObject中

我发现了错误

Caused by: java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.me.systems.commons.entities.Computer
关于我能做什么有什么想法吗

编辑:
我确实混淆了对象的名称,但我仔细检查了它们,它们与语法一致且准确。

我假设您的变量
dbObj
是一个从MongoDB检索到的DBObject,我还假设ClassCastException被抛出到示例代码的第6行

问题是,您在代码示例的第6行上进行了强制转换,而您的强制转换类型错误。当您从MongoDB中得到一些东西时,您不会得到Java对象(即计算机)。数据库中的任何文档或子文档都将作为基本对象返回。而这不能投射到计算机上

您需要做的是从BasicDBObject中提取相关信息,然后从中创建一台新计算机。例如,假设您的计算机如下所示:

class Computer {
    String name;
    int ipAddress;

    Computer(final String name, final int ipAddress) {
        this.name = name;
        this.ipAddress = ipAddress;
    }
}
然后,您可能需要执行以下操作:

final BasicDBObject dbObj = null;
if (dbObj.get("computers") != null){
    computerList =  (BasicDBList) dbObj.get("computers");
}
for ( obj : computerList) {
    final BasicDBObject computerAsDBObject = (BasicDBObject) obj;
    final Computer computer = new Computer(computerAsDBObject.getString("name"), 
                                           computerAsDBObject.getInt("ipAddress"));
    System.getComputers().add(computer);
}
当您直接使用Java驱动程序时,从数据库返回的类型非常有限,即字符串、int、long和其他原语,以及简单的对象,如BasicDBList和BasicDBObject


Abhishek在评论中暗示,如果您使用像Morphia或Spring数据这样的ODM,您将从Mongo获得“真实”的Java对象,比如您的计算机类,但单凭驱动程序无法获得这些对象。

数据是正确的数据类型吗?
com.me.systems.commons.entities.Data
是该类型的正确路径吗?是的,可能“Data”是一个错误的模糊名称。我要改变它,这样就不会让人困惑了。编辑:我将“数据”更改为“计算机”。很明显,错误显示computerList是一个列表而不是列表。如果直接从数据库中检索“dbObj”而不使用任何ORM,那么它将是列表,因此会出现错误。这没有任何意义。computerList是一个基本列表,它应该可以处理您正在谈论的内容?没问题,很高兴我能帮助您!