我试图进行查询以获取我的数据库中的所有值,每个值都有一个日期。一个例子:
leadTime: [
{
date: ISODate("2014-03-19T23:00:00Z"),
value: 25.8
},
{
date: ISODate("2014-03-20T23:00:00Z"),
value: 31.299999999999997
},
{
date: ISODate("2014-03-21T23:00:00Z"),
value: 34.4
}
]
enter code here
我的代码是:
DBObject query=new BasicDBObject("group",group);
DBObject serieData= col.findOne(query,new BasicDBObject(serie, 1));
if (serieData != null) {
List<DBObject> data = (List<DBObject>) serieData.get(serie);
for (DBObject item : data) {
result.add(new HistoryData((Date) item.get("date"),(Double) item.get("value")));
}
现在我想获得日期大于我通过参数传递的日期的值。我做的查询是:
DBObject query=new BasicDBObject("group",group)
.append("date", new BasicDBObject("$gte", parameterDate))
;
但我总是收到空的结果,你能帮助我吗?对不起我的英语而不是
答案 0 :(得分:0)
假设leadTime
是您文档中的字段,您的查询必须如下所示
DBObject query=new BasicDBObject("group",group)
.append("leadTime.date", new BasicDBObject("$gte", parameterDate))
;
你这样做的方式,MongoDB会在你的文档根目录中搜索一个日期字段:
{ _id: "Foo",
date: ISODate("2014-03-19T23:00:00Z"),
[...]
}
如果查询字段是单个值或数组,MongoDB中的查询没有区别,因此在包含子文档数组的字段上使用点表示法是完全有效的。
答案 1 :(得分:0)
使用简单查询无法实现您的目标。 但如果您仍想在mongodb中执行此操作,则需要使用聚合框架,具体如下:
db.<col_name>.aggregate( [ { $unwind : "$group" }, { $match : {'group.date': { $gte : parameterDate } } ] )
这是一个js命令,但你应该能够在Java Driver中轻松地翻译它(你也可以添加一个$ project操作来返回所需的字段)。