我如何在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, ...}, ...]
谢谢!
答案 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位。