【问题标题】:MongoDB sorting based on highest value of two fields of same documentMongoDB基于同一文档的两个字段的最大值排序
【发布时间】:2016-03-29 12:41:47
【问题描述】:

我有一个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 包含其他三个活动的最新时间戳。

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

所以排序顺序将是:1、3、2,因为对于 1:活动 1、3:活动 3、2:活动 2

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

【问题讨论】:

    标签: python mongodb sorting pymongo nosql


    【解决方案1】:

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

    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 并返回更大的值,创建一个用于在第一个投影(activity.sort)中排序的临时字段,然后您创建一个省略活动的新投影.sort 字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2022-01-07
      • 2021-11-13
      • 2013-01-03
      • 2023-02-11
      相关资源
      最近更新 更多