MongoDB 按条件排序

MongoDB sorting by condition

大家好,我遇到了一种情况,我需要对符合某些条件的数据进行排序,然后根据优先级对它们进行排序,即 首先,我想通过优先级降序对数据进行排序,然后如果优先级为 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,
    },
  },
]);

嘿伙计们谢谢你抽出时间我解决了我使用的问题

我只是在 $project 中添加一个字段,因为我正在使用 document: "$$ROOT" 所以它创建文档字段并将所有数据存储在其中,这就是优先级字段不可用的原因,

我只是在 $project 中添加 priority:1 并且它包含该字段。下面我 post 工作代码可能对你有帮助,如果你也想要类似的东西。

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