如何按外国字段排序,外国字段不使用字母/数字顺序?

时间:2018-06-14 01:16:02

标签: mongodb aggregation-framework

使用代表用户的本地表:

{
   _id: 'a',
   name: 'One',
   subscription_id: '1234'
}

表示用户订阅的外表:

{
   _id: '1234',
   plan: 'intro'
}

然后,您可以获得所有用户的数组,其订阅包含在子字段中:

db.users.aggregate([{
    "$lookup": {
      "from": "subscriptions",
      "as": "subscriptions",
      "let": {
        "id": "$_id"
      },
      "pipeline": [{
          "$match": {
            "$expr": {
              "$eq": ["$$id", "$subscription_id"]
            }
          }
        }
      ]
    }
  },
  {
    "$addFields": {
      "subscription": {
        "$arrayElemAt": ["$subscriptions", 0]
      }
    }
  }
])

结果数组中的每个元素都如下所示:

{
   _id: 'a',
   name: 'One',
   subscription_id: 1234,
   subscription: {
       _id: 1234,
       plan: 'intro'
   }
}

现在,我想要使用这些选项对整个用户数组进行排序:

  1. 按名称,按字母顺序排列。
  2. 然后按用户名按字母顺序排列。
  3. 然后按订阅计划,按计划的逻辑顺序。
  4. 按名称和用户名(按字母顺序排列)是直截了当的,因为您可以按升序对这些字段进行排序。

    {
      $sort: {
        name: 1,
        username: 1,
        subscription.plan: 1 // this wouldn't be logical, would it work at all?
      }
    }
    

    但是,订阅计划并非如此直接。订阅计划不能按字母顺序排列,同时保持合理性,例如计划是“介绍”,“基本”,“独立”,“专业”或类似的东西。

    有没有办法为这些元素提供逻辑排序顺序?聚合可以生成一个整数字段,具体按计划排序吗?

0 个答案:

没有答案