【问题标题】:Spring Data MongoDB Aggregation Match with DateSpring Data MongoDB聚合匹配日期
【发布时间】:2017-08-11 09:59:25
【问题描述】:

我想在 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 结果或一个想法来制作这个匹配阶段?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!为了完成您的答案,我将添加使用它来生成日期,因为 Java.utils.Date 的所有功能都已弃用:Date date = LocalDate.parse("2017-03-13").toDate(); 请允许我添加它,因为在我的搜索中我找不到这个再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2015-09-06
    • 2020-12-22
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2014-01-30
    相关资源
    最近更新 更多