2014-03-19 66 views
0

我是新來蒙戈骨料,蒙戈查詢:如何獲得last_activity使用聚合

我要求的用戶是顯示user和他last_activity_timelast_activity

Collection Object: 
{ 
    "_id" : ObjectId("123456"), 
    "activity_count" : NumberLong(0), 
    "dt" : ISODate("2014-02-18T20:45:00.001Z"), 
    "job_functions" : [ ], 
    "joined_time" : ISODate("2014-01-27T22:53:57.024Z"), 
    "views_cnt" : NumberLong(6), 
    "last_activity" : "Login", 
    "last_activity_time" : ISODate("2014-02-18T20:56:43.552Z"), 
    "locations" : [ ], 
    "user_id" : "123456", 
    "user_name" : "User 1" 
} 

{ 
    "_id" : ObjectId("789034"), 
    "activity_count" : NumberLong(0), 
    "dt" : ISODate("2014-02-18T21:45:00.001Z"), 
    "job_functions" : [ ], 
    "joined_time" : ISODate("2014-01-27T22:53:57.024Z"), 
    "views_cnt" : NumberLong(6), 
    "last_activity" : "Page View", 
    "last_activity_time" : ISODate("2014-02-18T20:56:43.552Z"), 
    "locations" : [ ], 
    "user_id" : "123456", 
    "user_name" : "User 1" 
} 

我需要得到

{ 
_id: { 
    user_id: "123456" 
}, 
    key: "123456", 
    user_name: "Ba Pub", 
    last_activity_time: "2014-02-18T20:56:43.552Z", 
    joined_time: "2014-01-27T22:53:57.024Z", 
    last_activity: "Page View" 
} 

我面臨的問題是last_activity_time,我可以得到max(last_activity_time),但last_activity是有點棘手。

任何幫助表示讚賞。

回答

0

您可以使用$排序相聚合管道(之前的小組賽階段)通過last_activity_time降序排序,然後使用$first運營商獲得last_activity

+0

我的最終輸出應該是最活躍的用戶,這是基於** activity_count ** – user3438004

+0

這是我已經想出的聚合查詢, – user3438004

+0

謝謝,這解決了我的擔憂。 – user3438004

0

db.r_user.aggregate({ 「 $ match「:{」dt「:{」$ gte「:ISODate(」2013-12-12T18:30:00.000Z「),」$ lte「:ISODate(」2014-03-19T18:29:59.999Z「 )}}},
{「$ match」:{「activity_count」:{「$ gt」:0}}},
{「$ project」:{「u」:1,「user_id」 「user_name」:1,「last_activity_time」:1,「job_functions」:1,「locations」:1, 「joined_time」:1,「first_visit_time」:1,「activity_count」:1,「last_activity」:1, 「$」:{「user_id」:「$ user_id」},「dt」:1}},
{「$ sort」:{「last_activity_time」: - 1}},
{「$ group」:{「_id」 「key」:{「$ first」:「$ user_id」},「user_name」:{「$ first」:「$ user_name」}, 「last_activity_time」:{「$ max」:「$ last_activity_time」}, job_functions「:{」$ last「:」$ job_functions「}, 」locations「:{」$ last「:」$ locations「},」joined_time「:{」$ last「:」$ joined_time「} 」 first_visit_time「:{」$ min「:」$ first_visit_time「},」activity_count「:{」$ sum「:」$ activity_count「}, 」last_activity「:{」$ first「:」$ last_activity「}}}, {「$ sort」:{「activity_count」: - 1,「_ id」:1}},{「$ skip」:5},{「$ limit」:5}

+0

這是我的聚合查詢,最終輸出是前5名活躍用戶** active_count **,在前5名我需要獲得該用戶的最後一項活動。 – user3438004