有人可以就如何访问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"]
答案 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();
}