在 MongoDB 中存储路由

Posted

技术标签:

【中文标题】在 MongoDB 中存储路由【英文标题】:Storing a route in MongoDB 【发布时间】:2017-05-31 13:57:16 【问题描述】:

我正在为移动应用开发一个后端。移动应用程序可以启动/停止 gps 跟踪,因此我们有某种 Route 对象。他们每 10-30 秒(可能经常)将他们的 gps 坐标(lng/lat)发送到服务器。问题是:将此坐标存储在 mongo 中的最佳方法是什么?

例如,我可以将它们存储为GeoJson LineString,但如果路线太长怎么办?据我记得,文档最大大小为 16 Mb。我可以使用一些更新查询动态更新这个对象吗?我的意思是每次应用程序发送新点时只需将其添加到末尾,而不需要从数据库中获取所有对象,将新点添加到它并保存。

也许将每个点都存储为文档有意义?

【问题讨论】:

16Mb 已经足够了,你不觉得吗? 【参考方案1】:

您可以使用$push 附加到您的地理坐标,即

db.collection.update('_id': 'foo', '$push': 'geo_field.coordinates': [999,999])

至于 16 MB 的文档大小限制,如果您觉得可以超过它,您还有其他一些选择:

将坐标存储为geopoint(s) 并使用其他字段对您的线条进行分组 使用 '$each' 和 '$slice' 的组合将数组大小限制为最后 n 个元素,例如 here

【讨论】:

【参考方案2】:

您可能想查看geodna 并可能存储起始坐标的地理坐标,并且只存储路线中其余点的增量。

【讨论】:

以上是关于在 MongoDB 中存储路由的主要内容,如果未能解决你的问题,请参考以下文章

如何将代码片段存储在 mongodb 中?

使用快速路由器时如何实现MongoDB排序

MongoDB之分片集群与复制集

如何建立注销用户的路由并从mongodb数据库中删除

mongodb分片后怎么取数据

mongodb第十篇文章~探讨mongodb的集群