MongoDB 根据同一文档的两个字段的最大值排序

MongoDB sorting based on highest value of two fields of same document

我有一个 collection,其中包含以下字段:

{
    "_id": 1,
    "latestActivity": "2015-12-23 12:30:00",
    "activity": {
        "activity1": "2015-12-23 12:25:00",
        "activity2": "2015-12-23 12:20:00",
        "activity3": "2015-12-23 12:30:00"
    }
}
{
    "_id": 2,
    "latestActivity": "2015-12-23 12:34:00",
    "activity": {
        "activity1": "2015-12-23 12:22:00",
        "activity2": "2015-12-23 12:27:00",
        "activity3": "2015-12-23 12:34:00"
    }
}
{
    "_id": 3,
    "latestActivity": "2015-12-23 12:45:00",
    "activity": {
        "activity1": "2015-12-23 12:45:00",
        "activity2": "2015-12-23 12:23:00",
        "activity3": "2015-12-23 12:26:00"
    }
}

latestActivity 包含其他三个活动的最新时间戳。

现在我运行遇到的问题是我需要先比较第二个和第三个activity,得到其中最新的,然后根据那个对集合进行排序。

因此排序顺序为:1、3、2 因为对于 1:活动 1、3:activity 3,2:activity 2

是否可以使用一些查询来做到这一点?

不涉及性能主题,您正在寻找的查询是这样的:

db.collection.aggregate([ {
    $project: {
      "latestActivity":1,
      "activity.count1": 1,
      "activity.activity1": 1,
      "activity.activity2": 1,
      "activity.activity3": 1,
      "activity.sort": {
        $cond: {
          if: {
            $gt: [
              "$activity.activity3",
              "$activity.activity2"
            ]
          },
          then: "$activity.activity3",
          else: "$activity.activity2"
        }
      }
    }
  },
  {
    $sort: {
      "activity.sort": 1
    }
  },
  {
    $project: {
      "latestActivity":1,
      "activity.activity1": 1,
      "activity.activity2": 1,
      "activity.activity3": 1
    }
  }
])

您通过使用 $cond 表达式比较 activity2activity3 以及 [=20=,在第一个投影 (activity.sort) 中创建用于排序的临时字段] 越大,则创建一个省略 activity.sort 字段的新投影。