You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB索引创建及按MMSI分组的船舶位置查询需求

嘿,这需求用MongoDB的聚合框架就能完美解决!我给你写个完整的查询示例,再一步步拆解每个部分的作用:

完整聚合查询代码

db.yourCollectionName.aggregate([
  // 核心:按MMSI分组,统计总数并收集坐标
  {
    $group: {
      _id: "$properties.MMSI", // 以MMSI作为分组依据
      totalRecords: { $sum: 1 }, // 统计该MMSI对应的总记录数
      coordinates: { $push: "$geometry.coordinates" } // 收集所有对应的坐标数组
    }
  },
  // 可选:对结果排序(比如按总记录数降序)
  {
    $sort: { totalRecords: -1 }
  },
  // 可选:优化输出格式(把分组用的_id重命名为MMSI)
  {
    $project: {
      MMSI: "$_id",
      totalRecords: 1,
      coordinates: 1,
      _id: 0 // 隐藏原始的_id字段,让结果更直观
    }
  }
])

各阶段详细说明

  • $group阶段:这是实现需求的核心。$sum:1会给每组的每条记录累加1,最终得到该MMSI的总记录数;$push则会把每个文档里的geometry.coordinates数组,逐一收集到一个新的数组中,方便后续查看该船舶的所有位置点。
  • $sort阶段:可选步骤,如果你需要对结果排序,比如想先看记录数最多的船舶,就用{ totalRecords: -1 }(降序);如果想按MMSI编号升序排列,就改成{ MMSI: 1 }。
  • $project阶段:可选步骤,用来调整输出的字段名称,把分组用的_id重命名为MMSI,同时隐藏原始的_id字段,让最终结果的可读性更强。

示例输出效果

运行查询后,你会得到类似这样的结构化结果:

[
  {
    "MMSI": "636015036",
    "totalRecords": 5,
    "coordinates": [
      [157.0625, -24.36573],
      [157.1234, -24.45678],
      // 该MMSI对应的其他坐标...
    ]
  },
  // 其他MMSI的分组结果...
]

内容的提问来源于stack exchange,提问作者e7lT2P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:59:17