MongoDB排序基于同一文档的两个字段的最高值

时间:2015-12-23 06:06:11

标签: python mongodb sorting pymongo nosql

我有FilePath1 = "C:\Main Folder\Folder A\" ActiveWorkbook.SaveCopyAs FilePath1 & "\" & Filename & ".xls" ,其中包含以下字段:

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" } } 包含其他三项活动的最新时间戳。

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

因此,排序顺序为:1,3,2因为1:actvity 1,3:活动3,2:活动2

是否可以使用某些查询来执行此操作?

1 个答案:

答案 0 :(得分: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
    }
  }
])

您可以使用activity.sort表达式比较$condactivity2来创建一个临时字段,以便在第一个投影(activity3)中进行排序,并返回更大的,然后您创建一个省略activity.sort字段的新投影。