2016-02-05 30 views
1

请考虑mongoDb中的以下数据,我在这里存储用户活动。时间戳是创建记录的时间。如何获得Mongo Group之后的附加数据

我想要什么是每个用户最近的活动。

{ user: "A", activity : "act1" , date: timestamp} 
{ user: "B", activity : "act3" , date: timestamp} 
{ user: "C", activity : "act2" , date: timestamp} 
{ user: "A", activity : "act2" , date: timestamp} 
{ user: "B", activity : "act3" , date: timestamp} 
{ user: "C", activity : "act1" , date: timestamp} 

使用

db.aggregate({ 
    [ 
    $group: { 
     _id: "$user", 
     latest_activity_time: {$max: "$date"}, 
    } 
    }]) 

分组给了我只有最近的活动时间,我没能获得最近的活动。

回答

1

秩序管道现任文件首先使用$sort管道运营商然后使用$first$last蓄电池运营商在你的$group步,根据以前的排序方向:

var pipeline = [ 
    { "$sort": { "date": -1 } }, // or order by date ascending { "$sort": { "date": 1 } } 
    { 
     "$group": { 
      "_id": "$user", 
      "latest_activity": { "$first": "$activity" }, // if ordered by date ascending "latest_activity": { "$last": "$activity" } 
      "latest_activity_time": { "$first": "$date" } // if ordered by date ascending "latest_activity_time": { "$last": "$date" } 
     } 
    } 
]; 

Model.aggregate(pipeline) 
    .exec(function (err, result){ 
     console.log(JSON.stringify(result, null, 4)); 
    });