【问题标题】:Mongoose only sorting dates by timeMongoose 仅​​按时间排序日期
【发布时间】:2019-07-15 21:55:27
【问题描述】:

我正在运行一个 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,它显示在日期为 02-1902-21 的其他条目之前,因为他们的时间较晚(例如06:41:47)。

比赛表的架构如下:

    const schema = new mongoose.Schema({
      date: Date,
      game_name: String,
      status: String,
      comp_id: Number,
    });

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

【问题讨论】:

标签: javascript node.js mongodb mongoose


【解决方案1】:

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

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

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

【讨论】:

  • 这正是问题所在。有问题的日期被保存为自纪元以来的毫秒数,而不是日期对象。谢谢!
猜你喜欢
  • 2019-01-23
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多