MongoDB сортировка по условию - PullRequest
0 голосов
/ 29 января 2019

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

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

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

1 Ответ

0 голосов
/ 29 января 2019

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

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

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

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,
    },
  },
])
...