在MongoDB中分组时获取最大值的相关字段
下面SQL对应的mongo查询是什么,它获取每个did的最新文档的在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
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不应该是规范化的。所有内容都在一个文档中,而不是规范化的