2013-06-26 38 views
2

我想從mongoDB中獲取數組元素並顯示它,這裏是我的示例代碼。如何使用java顯示mongoDB數組

String[] previliges = new String[20]; 
String g_name = (String)jComboBox2.getSelectedItem(); 
DBCursor f; 
BasicDBObject query = new BasicDBObject("group_name", g_name); 

connection.MongoConnection con = new MongoConnection(); 
con.createConnection(); 
con.selectDB("test", "user_group"); 

f = con.coll.find(query); 
previliges = (String[])f.next().get("privileges"); 
System.out.println(previliges.length); 

它給我的是一個例外 - > com.mongodb.BasicDBList不能轉換爲[Ljava.lang.String;從MongoDB的集合

我的樣本文檔:

{  
    "_id" : ObjectId("51c7ebd9e4b096449a530024"), 
    "group_name" : "assss", 
    "privileges" : [ 
     "View Log History", 
     "Communication" 
    ] 
} 
+1

見http://stackoverflow.com/questions/8957900 /閱讀數組中的mongodb –

回答

0

你看com.mongodb.BasicDBList基本上延伸的ArrayList。

f.next().get("privileges");是一個列表。你可能想要做類似

previliges= f.next().get("privileges").toArray(new String[0]); 

是的,0是好的。那麼,是這樣的:

previliges= f.next().get("privileges").toArray(new String[20]); 

明明空檢查等等

+0

@ Nishant->找不到Symbol toArray(); –

+0

這很奇怪。可能你需要先投到BasicDBList。然後調用toArray。文件清楚地表明它支持陣列。 – Nishant

1

特權的陣列會回來的BasicDBList,而不是字符串數組。所以你不能將它轉換爲String []。

而不是做的:

previliges=(String[]) f.next().get("privileges"); 
System.out.println(previliges.length); 

嘗試:

BasicDBList privileges = (BasicDBList) f.next().get("privileges"); 
System.out.println(privileges.size()); 

您可以通過這個循環,就像您在任何名單:

for (Object privilege : privileges) { 
    String privilegeAsString = (String) privilege; 
}