日期和时间过滤器与 find() 操作一起工作正常,但 $match 与 mongodb 中的聚合有问题

Date and Time filter working fine with find() operation but issues with $match with aggregate in mongodb

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

           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() 一起工作正常,returns 期望的结果:

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

但相同的查询不适用于 aggregate.match(query),如下所示:

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

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

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

根据 mongodb 官方文档 says

  • new Date("") returns 具有指定日期的 ISODate。

  • new Date("") 指定
    中的日期时间 客户端的本地时区和 returns 具有指定
    的 ISODate UTC 日期时间。

  • new Date("") 指定 UTC 日期时间 returns 具有 UTC 指定日期时间的 ISODate。

  • new Date() 指定日期时间为毫秒 Unix 纪元(1970 年 1 月 1 日),以及 returns 结果 ISODate
    实例.