日期和时间过滤器可以很好地与find()操作配合使用,但是在mongodb中,$ match与聚合的问题

时间:2018-10-26 11:50:35

标签: database mongodb mongoose datefilter

我正在构建动态查询,如下所示:

           if(DateX && DateY){
                query.createdAt = {
                    $gte: new Date(DateX).toISOString(),
                    $lt : new Date(DateY).toISOString() 
                }

            }else if(DateX){
                query.createdAt = {
                    $gte: new Date(DateX).toISOString() 
                }

            }else if(DateY){
                query.createdAt = {
                    $lt: new Date(DateY).toISOString() 
                }
            }

这里的日期DateX和DateY是tz格式的日期。

上面的查询可以使用find()正常工作,并返回所需的结果:

Model.find(query).lean().exec();

但以下相同查询不适用于aggregate.match(query)

Model.aggregate()
            .match(query)
            .exec()

1 个答案:

答案 0 :(得分:0)

我试图将new Date(DateX)new Date(DateY)转换为ISO格式的日期时间字符串,但在这里不起作用。由于new Date()构造函数本身会返回带有指定日期的ISODate

我刚刚从.toISOString()中删除了new Date().toISOString(),它开始正常工作。

根据mongodb官方文档says

  • new Date(“”)返回具有指定日期的ISODate。

  • new Date(“”)在
    中指定日期时间 客户的本地时区,并返回具有指定
    的ISODate 日期时间(UTC)。

  • new Date(“”)以UTC指定日期时间 并以UTC返回具有指定日期时间的ISODate。

  • new Date()指定日期时间,以毫秒为单位 Unix时代(1970年1月1日),并返回结果ISODate
    实例。