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