2014-05-02 65 views
0

的MongoDB和JSP:用mongodb和jsp顯示子文檔?

我的代碼:


DBCursor curseur = table.find(); 

while (curseur.hasNext()) { 
    DBObject ligne = curseur.next(); 

    out.println(ligne.get("_id")); 
    out.println(ligne.get("joueur")); 
    out.println(ligne.get("equipes")); 
    out.println(ligne.get("matchs")); 
} 

代碼運行正常,但問題是在顯示:


_id 1 
Joueur { "nom" : "De Oliveira" , "prenom" : "Denilson"} 
Equipes [ "Sao Paulo FC" , "Bétis Seville" , "Bordeaux"] 
Matchs [{ "date_m" : "1996" , "stade" : "Morumbi"}, 
     { "date_m" : "1999" , "stade" : "Benito Villamarn"}, 
     { "date_m" : "2005" , "stade" : "Chaban-Delmas"}] 

這是正確的,但:

  1. 我怎麼能知道列數?

  2. 如何訪問子文檔?

我想用這種結構來顯示數據的列表(沒有括號和括號中):


id : 1 

Joueur : nom : De Oliveira 
     prenom : Denilson 

Equipes : Sao Paulo FC, Betis Seville, Bordeaux 

matchs : date_m : 1996 
     stade : Morumbi 

     date_m : 1999 
     stade : Benito Villamarn 

     date_m : 2005 
     stade : Chaban-Delmas 

預先感謝您的合作!

回答

0

如果你想獲取數據文檔的內部數組,你需要將其存儲在ArrayList或Java的List裏面,像這樣:

cursor = document.find(query); 
    if(cursor.hasNext()) { 
    ArrayList<?> Matchs = (BasicDBList) cursor.next().get("Matchs"); 
      /* here you can iterate over Matchs arrayList and get his data */ 
      for(int i=0; i< Matchs.size(); i++){ 
        JsonParser jsonParser = new JsonParser(); 
        JsonElement jsonElement = jsonParser.parse(String.valueOf(Matchs.get(i))); 

       if (jsonElement.isJsonObject()) { 
        JsonObject jsonObject = jsonElement.getAsJsonObject(); 
        String date_m = jsonObject.get("date_m").getAsString(); 
        String stade = jsonObject.get("stade").getAsString(); 
       } 
      } 
    } 

注:你需要添加到你的項目一google.gson的罐子,反序列化更容易的BSON對象

https://code.google.com/p/google-gson/downloads/detail?name=google-gson-2.2.4-release.zip

我希望它能幫助。

+0

謝謝!但:ArrayList Matchs =(BasicDBList)cursor.next()。get(「Matchs」); =>錯誤:BasicDBList不能被解析爲一個類型 – user3595568

+0

你在做進口:'進口com.mongodb.BasicDBList;'? – HCarrasko

+0

我輸入了包裹!現在沒有錯誤!謝謝 !但是當我運行我的應用程序=>錯誤:java.lang.NullPointerException! DBCollection COLL = db.getCollection( 「table_auteur」); \t \t CUR DBCursor = coll.find(); \t 如果(cur.hasNext()){ \t \t \t ArrayList的 =馬成順(BasicDBList)cur.next()得到( 「配襯」); ...... – user3595568

0

使用dbObject.size()可以獲取「列」的數量。子文檔只是由其他DBObjects支持的字段,因此您可以像訪問其他字段一樣獲取它們。

+0

對於列數是沒問題的! thanx! 但對於子文檔顯示我不明白! 我改變了代碼: DBCollection coll = db.getCollection(「table_auteur」); \t \t \t DBCursor cur = coll.find(); \t for(DBObject doc:cur){ \t String desc =(String)doc.get(「description_generale」); \t out.println(desc); DBObject auteur =(BasicDBObject)doc.get(「auteurs」); \t String nom_auteur =(String)auteur.get(「nom」); \t out。的println(所以reportName); \t} =>錯誤:java.lang.ClassCastException:com.mongodb.BasicDBList不能轉換到com.mongodb.BasicDBObject ???? – user3595568

+0

您正在轉換爲BasicDBObject而不是DBObject。 BasicDBList不是BasicDBObject,而是* DBObject。 – evanchooly

+0

對不起!但我不明白! BasicDBList auteurs =((DBObject))doc.get(「matchs」); \t字符串體育場=(字符串)auteurs.get( 「體育場」); \t字符串date_m =(字符串)auteurs.get( 「date_m」); – user3595568