有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring数据MongoDB聚合与日期匹配

我想在SpringDataMongo中创建这个聚合管道

    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"),基本CDBO对象的结果是"$gte": "ISODate(2017-03-13)",所以它不起作用

你知道我怎样才能得到相同的JS结果吗?或者,你有什么想法让这场比赛变得不一样吗


共 (1) 个答案

  1. # 1 楼答案

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

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

    你需要创建一个日期对象,然后在比较中使用它。比如:

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