日期和时间过滤器与 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
实例.
我正在构建如下动态查询:
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
实例.