我如何在 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, ...}, ...]
谢谢!
我如何在 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, ...}, ...]
谢谢!
您需要为此使用聚合框架:
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 名。