MongoDB $ GTE日期查询无法按预期工作

时间:2018-07-06 08:51:15

标签: mongodb

我收集了以下数据。当我使用

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")
}

3 个答案:

答案 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以提供的格式(即
  • )转换提供的ISOdate
  

{$ dateToString:{date:ISODate(“ 2020-02-21T00:00:00.000 + 0000”),format:“%Y-%m-%d”}}输出“ 2020-02-01” < / p>

  • $ cmp将第一个值A与第二个B进行比较,结果如下:

    • A -1
    • A = B => 0
    • A> B => 1

只需调整ab标准即可满足您的需求({$ eq:1}用于将来的日期,{$ eq:-1}用于过去的日期,{$ eq:0}用于当前的日期,{$ ne:0}用于不是今天的日期,等等...)