MongoDB按条件排序

时间:2019-01-29 11:22:29

标签: mongodb sorting conditional

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

1 个答案:

答案 0 :(得分:0)

嘿,谢谢您为我解决的问题

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

我只需在$ project中添加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,
    },
  },
])