从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; 

} 

我不完全理解的发布解决方案,使该阵列的所有值,所以我力图混淆如何纠正投误差。

+0

我不知道MongoDB的,但如果方法'document.get(“Topics”)).listIterator()'返回一个'ArrayList',为什么不直接使用它,而不是将它转换为'BasicDBList'(这可能是弃用的API,只是一个猜测) – xander

我认为你需要存储的话题在BasicDBList对象:

BasicDBList topics = (BasicDBList) document.get("Topics"); 

然后你可以遍历并保存到你的数组:

List<String> result = new ArrayList<String>(); 
for(Object element: topics) { 
    result.add((String) element); 
} 
+0

我是一个投标混淆,其中是题目Mongo实际使用? –

+0

我的意思是BasicDBList就像一个Java List,所以你不需要获得迭代器,你可以在一个“foreach”中迭代它,就像一个Array:我写''Mongo'时写了'list'。现在答案被编辑了,感谢@ the4kman – Antonio314

+0

mhh它说:“java.util.ArrayList不能转换为com.mongodb.BasicDBList” –