Сортировка MongoDB по условию

Привет, ребята, я застрял в одном состоянии, когда мне нужно отсортировать данные, которые соответствуют некоторым условиям, а затем отсортировать их по приоритетным основаниям, т.е. сначала я хочу отсортировать данные по приоритету в порядке убывания, а затем отсортировать их, если приоритет равен 1 (высокий), отсортировать документ по полю createdAt, иначе по полю даты.

В настоящее время я создаю один агрегат самостоятельно, но он не возвращает правильные данные.

model.aggregate([
  {
    $match: {
      jobId,
      deprecated: false,
    },
  },
  {
    $project: {
      document: "$$ROOT",
      sort: {
        $cond: {
          if: {
            $eq: ["$priority", 1],
          },
          then: "$createdAt",
          else: "$date",
        },
      },
    },
  },
  {
    $sort: {
      priority: -1,
      sort: 1,
    },
  },
]);
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
1 315
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

эй, ребята, спасибо за ваше время, я решаю проблему, которую использую

я просто добавляю одно поле в $project из-за того, что использую document: "$$ROOT" поэтому он создает поле документа и хранит в нем все данные, и поэтому поле приоритета недоступно,

я просто добавляю priority:1 в проект $, и он включает это поле. ниже я публикую рабочий код, может быть, он поможет вам, если вы тоже хотите что-то подобное.

model.aggregate([
  {
    $match: {
      jobId: '5c501eed65816d61c6a0af77',
      deprecated: false,
    },
  },
  {
    $project: {
      document: "$$ROOT",
      priority: 1,  
      sort: {
        $cond: {
          if: {
            $eq: ["$priority", 1],
          },
          then: "$createdAt",
          else: "$date",
        },
      },
    },
  },
  {
    $sort: {
      priority: -1,  
      sort: 1,
    },
  },
])

Другие вопросы по теме