MongoDB日期查询JAVA

时间:2014-08-20 08:40:11

标签: java mongodb

我试图进行查询以获取我的数据库中的所有值,每个值都有一个日期。一个例子:

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

但我总是收到空的结果,你能帮助我吗?对不起我的英语而不是

2 个答案:

答案 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操作来返回所需的字段)。