如何在MongoDB中按location经纬度分组返回事件集合数据
MongoDB按经纬度分组事件文档
这个需求完全可以实现,通过MongoDB的聚合管道就能完成。以下是具体的查询语句和步骤说明:
聚合查询代码
db.events.aggregate([ // 按经纬度组合分组,收集同位置的所有事件 { $group: { _id: { latitude: "$location.latitude", longitude: "$location.longitude" }, events: { $push: "$$ROOT" } } }, // 将所有分组的事件数组汇总到一个数组中 { $group: { _id: null, groupedEvents: { $push: "$events" } } }, // 剔除不需要的_id字段 { $project: { _id: 0, groupedEvents: 1 } }, // 将汇总后的数组设为返回结果的顶层结构 { $replaceRoot: { newRoot: "$groupedEvents" } } ])
各阶段说明
- 第一阶段$group:以经纬度的组合作为分组标识,使用
$push: "$$ROOT"把当前完整的事件文档添加到events数组中,实现同位置事件的聚合。 - 第二阶段$group:全局分组(
_id: null),把每个位置对应的events数组收集到groupedEvents数组里,形成你需要的数组嵌套结构。 - $project:移除自动生成的
_id字段,只保留目标数组。 - $replaceRoot:将
groupedEvents数组提升为返回结果的顶层,最终输出格式与你期望的完全一致。
如果不需要严格的数组嵌套结构,仅保留每个经纬度对应事件数组的对象集合,只需要执行第一阶段的$group即可。
内容的提问来源于stack exchange,提问作者Jovan Jevtić
相关产品推荐
相关产品推荐

