我正在构建动态查询,如下所示:
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()
答案 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
实例。