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

MongoDB - How to access value field without defining key

有人可以就如何访问 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"]

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