Spring数据MongoDB聚合与日期匹配

时间:2017-08-11 09:59:26

标签: java spring mongodb spring-data aggregation-framework

我想在Spring数据Mongo中创建这个聚合管道

    db.Events.aggregate([
                    {
                        "$match": {
                            "date": {
                                "$gte": ISODate("2017-03-13"),
                                "$lt": ISODate("2017-03-12")
                            }
                        }
                    }
])

所以我按照以下方式进行比赛:

BasicDBObject("$match",
                new BasicDBObject("date",
                        new BasicDBObject("$gte","ISODate("+"2017-03-12"+")").
                                      append("$lt","ISODate("+"2017-03-13"+")")
                                 )
              );

但是在JS聚合中它是"$gte": ISODate("2017-03-13"),而BasicDBObject的结果是"$gte": "ISODate(2017-03-13)"所以它不起作用。

你知道我怎样才能获得与JS结果相同的想法或者想要进行这个匹配阶段的想法呢?

1 个答案:

答案 0 :(得分:0)

问题是您将日期值设置为字符串:

new BasicDBObject("$gte","ISODate("+"2017-03-12"+")")

您需要创建一个Date对象,然后在比较中使用它。像这样:

Date fromDate = LocalDate.parse("2017-03-12").toDate();
Date toDate = LocalDate.parse("2017-03-13").toDate();

BasicDBObject("$match",
            new BasicDBObject("date",
                    new BasicDBObject("$gte",fromDate).
                                  append("$lt",toDate)
                             )
          );