Мангуст только сортирует даты по времени

1

Я использую сервер Node.JS, который использует Mongoose для запроса таблицы MongoDB, содержащей поле date. Однако, когда я сортирую результаты по 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-19 и 02-21, так как их времена позже (например, 06:41:47).

Схема для таблицы соревнований выглядит следующим образом:

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

Я попытался выполнить сортировку по дате несколькими различными способами, которые поддерживает Mongoose, но все они возвращают одинаковые результаты. Если бы кто-то мог предоставить исправление или обходной путь для этой проблемы, это было бы очень признательно!

  • 1
    Возможный дубликат In Mongoose, как мне отсортировать по дате? (Node.js)
  • 1
    Попробуйте сохранить дату, используя моменты или эпоху, чтобы сохранить даты. Проблема заключается в том, как сохранить дату.
Теги:
mongoose

1 ответ

1
Лучший ответ

У меня была похожая проблема, и в моем случае даты не были сохранены как даты в монго, например:

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

Это может быть связано с тем, как вы создаете объект даты. Используете ли вы момент или новый Date() или что-нибудь еще?

  • 0
    Это была именно проблема. Проблемная дата сохранялась в миллисекундах с начала эпохи вместо объектов даты. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню