gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:15:16 24 4
gpt4 key购买 nike

有人可以建议如何访问 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,后者又在层次结构中实现映射,而不是实现为 对象

修改后的代码如下所示:

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

关于java - MongoDB - 如何在不定义键的情况下访问值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com