Mongodb SQL子查询聚合类比

Mongodb SQL子查询聚合类比,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个SQL查询的工作示例: SELECT a.user_id, a.latitude, a.longitude, a.accuracy, a.heading, a.speed, a.created_at FROM `location` a INNER JOIN ( SELECT user_id, MAX(`created_at`) created_at FROM location WHERE created_at > :date GROUP BY `

我有一个SQL查询的工作示例:

SELECT a.user_id, a.latitude, a.longitude, a.accuracy, a.heading, a.speed, a.created_at 
FROM `location` a 
INNER JOIN (
    SELECT user_id, MAX(`created_at`) created_at
    FROM location
    WHERE created_at > :date
    GROUP BY `user_id`
) b ON a.`user_id` = b.`user_id` AND a.`created_at` = b.`created_at`
为每个用户选择今天的最后位置

如何在MongoDB中执行此查询

我用php获得了它的第一部分(子查询):

并且不想创建新的查询


也许在MongoDB中比在关系数据库中更容易实现?

我会尝试以不同的方式实现,而不是映射SQL查询。下面是汇总

db.location.aggregate([
 {$match : {$gte : beginOfDay}},
 {$sort : {'user_id' : 1, 'created_at' : -1}},
 {$group : {
         _id : '$user_id', 
         created_at: { $first: "$created_at" }, 
         latitude: { $first: "$latitude" }, 
         longitude: { $first: "$longitude" },
         // ....similarly other fields
        }
 }
]);
它的基本功能是通过过滤当天创建数据的所有用户文档,然后按用户id排序,并在分组阶段将创建的id降序,在操作员的帮助下,为每个用户id获取第一个文档数据,从而进行聚合


我不知道如何转换成php的方式,或者php驱动程序是否允许$first,或者不确定,但值得一试

所需输出的集合格式/形状是什么?是的,它可以工作!最终结果:
$locations=$mongodb->getCollection('location')->聚合([['$match'=>['created_at'=>['$gte'=>$beginOfDay]]],['$sort'=>['created_at'=>'=>1]],['$group'=>[''id'=>''$user\id','latitude'=>['first'=>在'=>'$latitude'],'经度'=>['first'=>''=>'''''.''''''=>['$first'=>'$heading'],'speed'=>['$first'=>'$speed'],'created_at'=>['$first'=>'']]];
其他问题,我怎样才能取代
\id
用户id键?很高兴它有帮助,我会说在小组阶段再添加一个字段,比如'user\u id'=>['$first'=>用户id'],在这种情况下,您将同时获得_id和user id作为user id的值。如果您想要文档的原始_id,我将使用类似“o_id”=>['$first'=>'$id']的内容。我想这些应该可以用。
db.location.aggregate([
 {$match : {$gte : beginOfDay}},
 {$sort : {'user_id' : 1, 'created_at' : -1}},
 {$group : {
         _id : '$user_id', 
         created_at: { $first: "$created_at" }, 
         latitude: { $first: "$latitude" }, 
         longitude: { $first: "$longitude" },
         // ....similarly other fields
        }
 }
]);