2017-05-06 39 views
0

我沒有在Java程序,在下面的表格中MongoDB數據庫生成值,並將其存儲:如何以檢索從存儲在MongoDB中使用Java驅動器陣列整數和時間戳值

{ 
    "_id" : 0, 
    "destination" : "destination_1", 
    "origin" : "origin1", 
    "duration_value" : [ 
      5, 
      5, 
      12 
    ], 
    "duration_text" : [ 
      null, 
      null, 
      null 
    ], 
    "timestamp" : [ 
      ISODate("2017-05-03T15:17:12.570Z"), 
      ISODate("2017-05-03T15:17:39.363Z"), 
      ISODate("2017-05-06T17:16:43.925Z") 
    ]} 

正如你所看到的有三個數組。在duration_value數組中,它們將始終以整數值存儲,並且在timestamp數組中它們將始終存儲time stamp值。 我現在需要檢索存儲在duration_value中的整數值,以便進行計算並檢索timestamp數組中輸入的值,而不是DBObjectBasicDBObject,但作爲類似的Timestamp類中的對象,以便能夠做其他操作。我能怎麼做?

到目前爲止,我已經能夠從數據庫中檢索元素,就像DBObject,而不是與它們的原始類型,我甚至不能投的DBObject錯誤沒有錯誤。我用下面的代碼:

MongoClient mongo = null; 
    DBCursor cursor = null; 


    try { 
     mongo = new MongoClient ("localhost", 27017); 
     DB db = mongo.getDB("testdb2"); 

     DBCollection table = db.getCollection("user"); 
     BasicDBObject searchQuery = new BasicDBObject(); 
     searchQuery.put("_id", 0); 
     cursor = table.find(searchQuery); 

     DBObject resultElement = cursor.next(); 
     List<DBObject> list = (List<DBObject>)resultElement.get("timestamp");    

     for(int i = 0; i < list.size(); i++){ 

      System.out.println("indice: " + i + " contenuto: " + list.get(i)); 
     } 


    } 
    catch(Exception e){ 
     System.out.println("error : " + e.getMessage()); 
     System.out.println("error : " + e.getCause()); 
    } 
    finally{ 
     cursor.close(); 
    } 

對不起,我的英語,謝謝你的幫助。

+0

你試過了嗎? 'Date date =(Date)list.get(i);'Mongo java驅動程序將mongo時間戳類型映射爲java.util.Date類型。您可以在Mongo 3.x驅動程序版本中使用新的'Document'和'MongoCollection' api類型安全變體。 – Veeram

+0

我誠實地嘗試了整數,因爲我需要用於其他數組,因爲我甚至無法施放那些讓我感覺非常不舒服的因此我沒有嘗試時間戳。我現在試了一下,它的工作原理,現在我不得不瞭解如何將其他數組轉換爲整數。你解決了我一半的問題。謝謝。 – Ennio

回答

0

將您的代碼更新到下面。使用findOne而不是findid上搜索。

MongoDB將時間戳映射到java.util.Date並將編號映射到java.lang.Double

DBObject result = table.findOne(searchQuery); 

BasicDBList number = (BasicDBList)result.get("duration_value"); 
BasicDBList timestamp = (BasicDBList)result.get("timestamp"); 

int integer = ((Number)number.get(i)).intValue(); 
Date date = (Date) timestamp.get(i); 
+0

謝謝。我解決了。 – Ennio

0

基於Java Driver API,您可以從DBObject獲取基本的Java類型。

您無法直接從DBObject獲取Timestamp實例。

爲BasicDBObject API文檔:爲繼承BasicBSONObject http://mongodb.github.io/mongo-java-driver/3.4/javadoc/com/mongodb/BasicDBObject.html

API文檔:http://mongodb.github.io/mongo-java-driver/3.4/javadoc/org/bson/BasicBSONObject.html

還有其他可用的Java MongoDB的庫。其中之一是MongoJack基於Java驅動程序與傑克遜庫。它支持開箱即用的JSON到Java對象映射。

+0

謝謝你的幫助。 – Ennio

+0

歡迎來到Stack Overflow!雖然這可能會在理論上回答這個問題,[這將是更可取的](// meta.stackoverflow.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – GhostCat

相關問題