我收集了以下数据。当我使用
db.collection.find({ endDate: { $gte: new Date() } })
它没有显示当前日期ISODate("2018-07-06T14:59:08.794+0000")
的结果。
{
"_id" : "GMDJcQMfs8j8EP9EE",
"endDate" : ISODate("2018-07-06T14:59:08.794+0000")
}
{
"_id" : "GMDJcQMfs12233",
"endDate" : ISODate("2020-02-21T00:00:00.000+0000")
}
{
"_id" : "GMDJerrr8j8EP9EE",
"endDate" : ISODate("2020-02-21T00:00:00.000+0000")
}
{
"_id" : "rrrJcQMfs8j8EP9EE",
"endDate" : ISODate("2020-02-21T00:00:00.000+0000")
}
答案 0 :(得分:0)
您引用的条件是$ gte,传递给该条件的日期是newDate()。
print(new Date()) - Execute this command in Mongo shell it Should be giving you the current date
My Console output
Fri Jul 06 2018 14:28:54 GMT+0530 (India Standard Time)
如果您的日期也是2018年7月6日,那么您的结果也不会获得2018年7月5日
答案 1 :(得分:0)
您必须考虑一天中的时间。您可以将请求日期的小时,分钟,秒和毫秒设置回零。
var date = new Date()
date.setHours(0, 0, 0, 0)
db.collection.find({ endDate: { $gte: date } })
现在将返回所有今天结束的记录。
答案 2 :(得分:0)
好的,我回到my answer to your previous question并进行解释:
db.test1.aggregate(
[
{
$project: {
endDate:1,
endDateFormatted:{$dateToString: {date:"$endDate",format:"%Y-%m-%d"}},
current:{$dateToString: {date:new Date(),format:"%Y-%m-%d"}}
}
},
{
$project: { ab: {$cmp: ['$endDateFormatted','$current']},endDate:1}
},
{
$match: {ab:{$eq:1}} // <= note de difference with your previous question
},
{
$project: {
endDate:1
}
},
]
);
{$ dateToString:{date:ISODate(“ 2020-02-21T00:00:00.000 + 0000”),format:“%Y-%m-%d”}}输出“ 2020-02-01” < / p>
$ cmp将第一个值A与第二个B进行比较,结果如下:
只需调整ab标准即可满足您的需求({$ eq:1}用于将来的日期,{$ eq:-1}用于过去的日期,{$ eq:0}用于当前的日期,{$ ne:0}用于不是今天的日期,等等...)