猫鼬只按时间排序日期

时间:2019-02-21 21:16:19

标签: javascript node.js mongodb mongoose

我正在运行一个Node.JS服务器,该服务器使用Mongoose查询包含date字段的MongoDB表。但是,当我按date对结果进行排序时,它们实际上仅按时间排序,而忽略了实际日期。例如,当我运行查询

    Competition.find({})
        .sort('date')
        .exec()
        .then(data => {
            res.json(data);
        })
        .catch(console.log);

它返回:

{"_id":"5c6c99e6e7179a27eb63a9a0","date":"2019-02-24T01:00:00.000Z","game_name":"UFO","status":"WAITING","comp_id":7}, 

{"_id":"5c6b95c8e7179a27eb62e7cf","date":"2019-02-19T06:41:47.185Z","game_name":"UFO","status":"COMPLETED","comp_id":6}, 

{"_id":"5c6b95b4e7179a27eb62e7cb","date":"2019-02-19T06:41:57.174Z","game_name":"UFO","status":"COMPLETED","comp_id":5}, 

{"_id":"5c6b95a4e7179a27eb62e7be","date":"2019-02-19T06:42:02.170Z","game_name":"UFO","status":"COMPLETED","comp_id":4}, 

{"_id":"5c6b9533e7179a27eb62e7a9","date":"2019-02-19T06:42:07.176Z","game_name":"UFO","status":"COMPLETED","comp_id":1}, 

{"_id":"5c6b958de7179a27eb62e7b8","date":"2019-02-21T18:48:50.497Z","game_name":"UFO_test","status":"COMPLETED","comp_id":3}

您可以在此处看到第一个条目的日期为02-24,因此它应显示在最后,但是由于时间为1:00:00,因此它在日期为{{1 }}和02-19,因为它们的时间较晚(例如02-21)。

竞赛表的架构如下:

06:41:47

我试图以Mongoose支持的几种不同方式执行日期排序,但是它们都返回相同的结果。如果有人可以提供修复或解决此问题的方法,将不胜感激!

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,在我的情况下,日期没有像这样在mongo中保存为日期:

"createdAt": {
  "$date": "2018-04-25T22:48:06.863Z"
}

这可能与您创建日期对象的方式有关。您在使用moment还是new Date()或其他任何东西?