在MongoDB中分组时获取最大值的相关字段

在MongoDB中分组时获取最大值的相关字段,mongodb,Mongodb,下面SQL对应的mongo查询是什么,它获取每个did的最新文档的lat和long: 查询:所有设备的最后一个位置是什么 did : device id ts : time stamp lat : latitude long : longitude SQL查询 SELECT did , ts, `lat`, `long` FROM points JOIN (SELECT

下面SQL对应的mongo查询是什么,它获取每个did的最新文档的
lat
long

查询:所有设备的最后一个位置是什么

did  : device id
ts   : time stamp
lat  : latitude 
long : longitude 
SQL查询

  SELECT 
        did , ts, `lat`, `long`
    FROM
        points
            JOIN
        (SELECT 
            MAX(ts) AS maxTs, did
        FROM
            points
        GROUP BY did) MxData ON points.ts = MxData.maxTs
            AND MxData.did = points.did;
下面是Mongo查询,我可以获得设备的最大时间戳,但不确定如何打印相应的lat和long

db.points.aggregate( [{ $group:{_id: "$did", maxTs: { $max: "$ts" }}}]).pretty();

我找到了解决方案,查询是

db.points.aggregate([
    {$sort:{"ts":1}} , 
    {$group:{"_id":"$did" , result:{$last:"$ts"}  , lat:{$last:"$lat"} , lon:{$last:"$lon"}}}
    ]);

我认为您的模式是规范化的,而mongo不应该是规范化的。所有内容都在一个文档中,而不是规范化的