Пн goose пользовательская сортировка с датой - PullRequest
0 голосов
/ 03 апреля 2020

Как я могу получить данные с помощью пользовательской сортировки в Mongoose? Существует дата начала задания, которую нужно отсортировать по месяцу и году, но в настоящее время этот сценарий сортируется только с декабря по январь.

router.get('/', (req, res) => {
Job.find()
    .sort({ from: -1 })
    .then(jobs => res.json(jobs))
    .catch(err => res.status(404).json(err));
});

Проблема заключается в сортировке; значения для из похожи на 12.2018, 06.2019, 03.2020, 11.2009 и т. д.

Я хочу отсортировать эти результаты сначала по году (после точка), а затем сортировать по месяцам. В настоящее время я не могу изменить способ установки данных, и они хранятся в виде String в схеме модели.

1 Ответ

1 голос
/ 03 апреля 2020

Вы должны использовать структуру агрегации, чтобы сначала преобразовать вашу строку в допустимую дату на

затем вы сортируете и окончательно удаляете созданное поле.

Вот запрос:

db.collection.aggregate([
  {
    $addFields: {
      date: {
        $dateFromParts: {
          year: {
            $convert: {
              input: {
                $arrayElemAt: [
                  {
                    $split: [
                      "$from",
                      "."
                    ]
                  },
                  1
                ]
              },
              to: "int"
            }
          },
          month: {
            $convert: {
              input: {
                $arrayElemAt: [
                  {
                    $split: [
                      "$from",
                      "."
                    ]
                  },
                  0
                ]
              },
              to: "int"
            }
          },

        }
      }
    }
  },
  {
    $sort: {
      date: -1
    }
  },
  {
    $project: {
      date: 0
    }
  }
])

Вы можете проверить это здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...