Mongodb $ ne日期查询无法按预期工作

时间:2018-07-05 15:55:46

标签: mongodb

我收集了以下数据。当我使用db.collection.find({endDate: {$ne: new Date()}})时,它还会显示当前日期为“ 2018年7月5日” 的结果。

{ 
    "_id" : "GMDJcQMfs8j8EP9EE", 
    "endDate" : ISODate("2018-07-05T14: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")
}

Plese see image

1 个答案:

答案 0 :(得分:0)

您可以通过将日期转换为字符串,添加具有相同格式的当前日期,将两者进行比较并过滤相同的结果来实现:

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:{$ne:0}}
        },
        {
        $project: {
           endDate:1
        }
    },
    ]
);

输出:

{ 
    "_id" : "GMDJcQMfs12233", 
    "endDate" : ISODate("2020-02-21T01:00:00.000+0100")
}
{ 
    "_id" : "GMDJerrr8j8EP9EE", 
    "endDate" : ISODate("2020-02-21T01:00:00.000+0100")
}
{ 
    "_id" : "rrrJcQMfs8j8EP9EE", 
    "endDate" : ISODate("2020-02-21T01:00:00.000+0100")
}