聚合 按字段A分組,然后取每組內(nèi)的最后一條數(shù)據(jù)的某一個字段的值

demo 數(shù)據(jù)

{
    {'_id': ObjectId('61cbd33850ada9fbdc600812'),
     'pid': 1,
     'other': 2,
     'uid': 888},
    {'_id': ObjectId('61cbd36750ada9fbdc600824'),
     'pid': 1,
     'other': 3,
     'uid': 998},
    {'_id': ObjectId('61cbd37550ada9fbdc600832'),
     'pid': 2,
     'other': 7,
     'uid': 22},
    {'_id': ObjectId('61cbd38750ada9fbdc600837'),
     'pid': 3,
     'other': 5,
     'uid': 87},
    {'_id': ObjectId('61cbd39050ada9fbdc60083a'),
     'pid': 3,
     'other': 7,
     'uid': 12},
    {'_id': ObjectId('61cbd46a50ada9fbdc60086a'),
     'pid': 3,
     'other': 22222,
     'uid': 35}
}

查詢

查詢1

a=client.mytest.test1.aggregate(
    [
        {
            "$group":{
                "_id":"$pid",
                "other":{
                    "$last":"$other"
                },
                "uid":{
                    "$last":"$uid"
                }
            }
        },
        {
            "$sort":{
                "other":1
            }
        }
    ]
)

結(jié)果

[
    {'_id': 1, 'other': 3, 'uid': 998},
    {'_id': 2, 'other': 7, 'uid': 22},
    {'_id': 3, 'other': 22222, 'uid': 35}
]

查詢2

a=client.mytest.test1.aggregate(
    [
        {
            "$group":{
                "_id":"$pid",
                "other":{
                    "$last":"$other"
                }
        },
        {
            "$sort":{
                "other":1
            }
        }
    ]
)

結(jié)果

[{'_id': 1, 'other': 3}, {'_id': 2, 'other': 7}, {'_id': 3, 'other': 22222}]

查詢3
先按 other 倒序排列,再按 pid 分組取每組的最后一個 other

a=client.mytest.test1.aggregate(
    [
        {
            "$sort":{
                "other":-1
            }
        },
        {
            "$group":{
                "_id":"$pid",
                "other":{
                    "$last":"$other"
                }
        }
    ]
)

結(jié)果

[{'_id': 1, 'other': 2}, {'_id': 2, 'other': 7}, {'_id': 3, 'other': 5}]

分析
先倒序

[{'_id': ObjectId('61cbd46a50ada9fbdc60086a'),
  'pid': 3,
  'other': 22222,
  'uid': 35},
 {'_id': ObjectId('61cbd37550ada9fbdc600832'),
  'pid': 2,
  'other': 7,
  'uid': 22},
 {'_id': ObjectId('61cbd39050ada9fbdc60083a'),
  'pid': 3,
  'other': 7,
  'uid': 12},
 {'_id': ObjectId('61cbd38750ada9fbdc600837'),
  'pid': 3,
  'other': 5,
  'uid': 87},
 {'_id': ObjectId('61cbd36750ada9fbdc600824'),
  'pid': 1,
  'other': 3,
  'uid': 998},
 {'_id': ObjectId('61cbd33850ada9fbdc600812'),
  'pid': 1,
  'other': 2,
  'uid': 888}]

再分組,取每組最后一個

util

查詢 1和 2,是先按pid分組,再查每組最后一條,得出結(jié)果A,最后在對A里的other字段進行排序
查詢3,是先按other字段排序,再根據(jù)排序結(jié)果進行分組取每組最后一條數(shù)據(jù)。
注意:分組后,每組內(nèi)的數(shù)據(jù),會保持之前的順序排列。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容