MongoDB - 如何在不定义键的情况下访问值字段

时间:2015-01-08 04:38:32

标签: java mongodb processing

有人可以就如何访问MongoDb中的值提出建议吗? 我正在使用Processing / Java,现在我使用以下内容来访问我感兴趣的特定字段的所有值。但是,由于键值是时间戳并且无法明确定义它,我只想获取所有值并将它们存储在数组中。

有人能告诉我这是怎么做到的吗?

  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"]

的新数组

1 个答案:

答案 0 :(得分:0)

由于values字段是映射,因此无法使用聚合框架将其作为数组。因此,您需要在客户端迭代values映射并检索其值以将其存储在列表中。

要迭代地图,values应该输入到BasicDBObject,后者又会在层次结构中实现地图,而会实现为Object。< / p>

您修改后的代码如下所示:

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();
}