MongoDB Group By查询

时间:2013-07-18 10:22:14

标签: mongodb aggregation-framework nosql

我如何在MongoDb上实现这个SQL查询

SELECT TOP 100 * FROM Tracks
WHERE ID IN (SELECT MAX(ID) FROM Tracks WHERE UserID IN ([UserIDs...]) GROUP BY UserID)

曲目结构:

Tracks[{_id, userId, {lat, lon},  dateCreate, ...}, ...]

谢谢!

1 个答案:

答案 0 :(得分:1)

您希望使用聚合框架:

db.Tracks.aggregate( [
    { $match: { 'UserID': { $in: [ UserIDs ] } } },
    { $group: { _id: '$UserID', max: { $max: '$_id' } },
    { $sort: { $max: -1 } },
    { $limit: 100 }
] );

首先我们匹配所需的UserID,然后根据UserID进行分组,并将最大_id值放在新的max字段中。然后我们按max排序,先获得最高的max数字,然后我们将其排在前100位。