gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:33:15 25 4
gpt4 key购买 nike

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

这是我所拥有的

BasicDBList computerList = new BasicDBList(); 
if (dbObj.get("computers") != null){
computerList = (BasicDBList) dbObj.get("computers");
}
for (Object obj : computerList) {
System.getComputers().add((Computer) obj);
}

我有一个主要的System对象,里面有一个列表,这就是我在这里所做的就是尝试从Mongo中检索computers并扔回数据对象。

我收到错误

Caused by: java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to com.me.systems.commons.entities.Computer

关于我能做什么有什么想法吗?

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

最佳答案

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

问题是您在代码示例中的第 6 行进行转换,并且转换为错误的类型。当您从 MongoDB 取回某些内容时,您不会取回 Java 对象(即计算机)。数据库中的任何文档或子文档都将作为 BasicDBObject 返回。并且这不能转换到计算机。

您需要做的是从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 驱动程序时,您只能从数据库中获取非常有限的类型集 - 即字符串、整数、长整型和其他基元,以及 BasicDBList 和 BasicDBObject 等简单对象。

Abhishek 在评论中暗示的是,如果您使用像 Morphia 或 Spring Data 这样的 ODM,您将从 Mongo 获得“真正的”Java 对象,例如您的 Computer 类,但您不会通过驱动程序获得这些对象独自一人。

关于java - 尝试从 Mongo 读取数组并将其放入 Java 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com