从Java中的MongoDB检索数组
我尝试读出MongoDB中文档数组的所有字段。 我试图从Stackoverflow张贴的解决方案适应我的使用情况,但我得到的错误信息:从Java中的MongoDB检索数组
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.mongodb.BasicDBList
at Connector.getTopics(Connector.java:249)
基本上我想在集合中的第一个文件的“主题”“主题读出数组“并将值保存到一个arrayList并返回它。
public ArrayList<String> getTopics() throws RemoteException {
// TODO Auto-generated method stub
MongoClient mongoClient = new MongoClient("localhost" , 27017);
MongoDatabase database = mongoClient.getDatabase("JMS");
MongoCollection<Document> collection = database.getCollection("Topics");
ArrayList<String> list = new ArrayList<String>();
Document document = collection.find(eq("_id", 1.0)).first();
ListIterator<Object> topics = ((BasicDBList) document.get("Topics")).listIterator();
while(trustedList.hasNext()){
Object nextItem = topics.next();
list.add((String) nextItem);
}
return list;
}
我不完全理解的发布解决方案,使该阵列的所有值,所以我力图混淆如何纠正投误差。
我认为你需要存储的话题在BasicDBList对象:
BasicDBList topics = (BasicDBList) document.get("Topics");
然后你可以遍历并保存到你的数组:
List<String> result = new ArrayList<String>();
for(Object element: topics) {
result.add((String) element);
}
我是一个投标混淆,其中是题目Mongo实际使用? –
我的意思是BasicDBList就像一个Java List,所以你不需要获得迭代器,你可以在一个“foreach”中迭代它,就像一个Array:我写''Mongo'时写了'list'。现在答案被编辑了,感谢@ the4kman – Antonio314
mhh它说:“java.util.ArrayList不能转换为com.mongodb.BasicDBList” –
我不知道MongoDB的,但如果方法'document.get(“Topics”)).listIterator()'返回一个'ArrayList',为什么不直接使用它,而不是将它转换为'BasicDBList'(这可能是弃用的API,只是一个猜测) – xander