我有像
这样的mongo对象{
"name" : "mongo",
"values" : [
{
"date" : "02-23-2015",
"price" : "5"
},
{
"date" : "02-23-15",
"price" : "6"
},
{
"date" : "02-22-15",
"price" : "7"
}
]
}
我正在使用Java驱动程序,我可以使用以下查询提取此对象:
QueryBuilder builder = new QueryBuilder();
DBObject nameQuery = new BasicDBObject("name", "mongo");
builder.and(nameQuery);
DBObject fullQuery = builder.get();
然而,我想要的是提取所有的价格值,我想将它们存储在一个数组中 - 现在我只能返回整个对象..通过这样的子集在文档中没有很好地解释,一个例子会有所帮助。
任何帮助都将不胜感激。
编辑:好了,我现在可以遍历这个数组中的对象,但它没有利用mongo内置的ins,自然会慢一点:
while (curs.hasNext())
{
DBObject o = curs.next();
BasicDBList values = (BasicDBList) o.get("values");
BasicDBObject[] valuesArray = values.toArray(new BasicDBObject[0]);
for(BasicDBObject dbObj : valuesArray) {
name = dbObj.getString("name");
}
}
这允许我提取我想要的任何内容,但我知道有更有效的方法。任何帮助都会很棒,谢谢
答案 0 :(得分:0)
我认为它应该有用,或者它可以让你接近解决方案:
DB db = this.getConnection();
DBCollection coll = db.getCollection(collection);
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "mongo");
cursor = coll.find(searchQuery);
DBObject resultElement = null;
List <String> prices = new ArrayList<String>();
while(cursor.hasNext()){
resultElement = cursor.next();
prices.add ((String) resultElement.get("values.price"));
}
希望它有所帮助。
答案 1 :(得分:0)
DBCollection.find()
方法采用第二个名为keys的参数,它允许您定义应在结果中包含哪些字段。像这样使用它:
collection.find(query, new DBObject("values.price":1);
这将返回一个文档,其值数组仅包含如下价格:
{
"values" : [
{
"price" : "5"
},
{
"price" : "6"
},
{
"price" : "7"
}
]
}