2015-01-08 35 views
1

有人可以就如何訪問MongoDb中的值提供建議嗎? 我正在使用Processing/Java,現在我正在使用以下命令來訪問我感興趣的特定字段的所有值。但是,由於關鍵值是時間戳,並且不能明確定義它,所以我只想獲取所有值並將它們存儲在數組中。MongoDB - 如何在不定義密鑰的情況下訪問值字段

有人可以告訴我這是怎麼完成的嗎?

BasicDBObject query = new BasicDBObject("_sensor", getFieldValue); 
    cursor = coll.find(query); 

    try { 
    while (cursor.hasNext()) { 
     DBObject theObj = cursor.next(); 
     Object valueField = theObj.get("values"); 
     println(valueField); 
    } 
    } 
    finally { 
    cursor.close(); 
    } 

這裏是我從數據庫中查詢得到的結果:

{ "1414879800000" : "38" , "1414879860000" : "29" , "1414879920000" : "30" , "1414879980000" : "31" , "1414880040000" : "24" , "1414880100000" : "41" , "1414897380000" : "28" 

所以我想一個新的陣列的值:["38", "29", "30", "31", "24", "41", "28"]

+0

您可以發佈您收集的樣本文件?有兩種方法可以實現這一點 - 聚合結果或在Java中執行轉換,如果您可以發佈文檔結構,這將是明確的。 – BatScream

+0

這是好嗎? http://soniconlab.com/images/db.png – user2954378

+0

請參閱答案,如果有幫助請接受它。 – BatScream

回答

0

由於values場是地圖,無法使用聚合框架將其作爲數組獲取。因此,您需要在客戶端迭代values地圖並檢索其值以將其存儲在列表中。

要迭代的地圖,values應型鑄造到BasicDBObject這又實現了層次結構中的地圖和Object

你修改後的代碼看起來像:

BasicDBObject query = new BasicDBObject("_sensor", getFieldValue); 
DBCursor cursor = coll.find(query); 
List<String> v = null; 

try 
{ 
    while (cursor.hasNext()) 
    { 
     v = new ArrayList<String>(); 
     DBObject theObj = cursor.next(); 
     BasicDBObject valueField = (BasicDBObject) theObj.get("values"); 

     Set<String> keys = valueField.keySet(); 
     Iterator<String> iter = keys.iterator(); 
     while (iter.hasNext()) 
     { 
      v.add(valueField.getString(iter.next())); 
     } 
     System.out.println(v); 
    } 
} 
finally 
{ 
    cursor.close(); 
} 
+0

太棒了,謝謝你的解釋 – user2954378

相關問題