1

我如何在 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, ...}, ...]

谢谢!

4

1 回答 1

1

您需要为此使用聚合框架:

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

首先,我们匹配想要的 UserID,然后根据 UserID 进行分组,并将最大值放入_idmax字段中。然后我们按降序排序,max首先获得最高的max数字,然后我们限制前 100 名。

于 2013-07-18T10:28:50.793 回答