如何在 MongoDB 2.4.x 中存储附加数据以使其符合 geoJSON 格式

Posted

技术标签:

【中文标题】如何在 MongoDB 2.4.x 中存储附加数据以使其符合 geoJSON 格式【英文标题】:How to store additional data in MongoDB 2.4.x such that it conforms to geoJSON formatting 【发布时间】:2016-11-25 09:28:04 【问题描述】:

我有一个数据库集合,它遵循地理点位置的 geoJSON 格式。这使我可以轻松地从数据库中提取数据以使用 d3.js 进行显示。如果地理参考点包含自己的数据集,那么存储此信息以使其符合 geoJSON 格式并允许 MongoDB 2.4.x 2dsphere 查询的最佳方式是什么?

这是一个来自 geoJSON documentation 的示例


  "type": "Feature",
  "geometry": 
    "type": "Point",
    "coordinates": [123456, 234567]
  ,
  "properties": 
    "arrivalTime": 12345678,
    "departureTime": 23456789
  

让我们假设在这个特定点我有一个附加信息矩阵,其中每个矩阵条目由值对 x,y,z 给出。例如,如果 xy 是 1x10 向量,则 z 是 10x10 矩阵。为此,我需要存储此类信息,但我不想失去在 MongoDB 2.4.x 中使用 2dsphere 查询的能力,并且我希望我的数据库集合符合 geoJSON,以便其他库(如 d3) .js 能够毫无损失地进行交互。

【问题讨论】:

【参考方案1】:

您可以将 GeoJSON 对象放在文档的字段中。例如,如果某个位置具有像您的示例一样的 GeoJSON 对象,您可以将此文档嵌入到封装有关该位置的所有信息的文档中,例如:


  "_id": ObjectId(...),
  "geo": <GeoJSON object>,
  "meta": 
    "x": [1x10 vector],
    "y": [1x10 vector],
    "z": [10x10 matrix],
    "other": <other relevant meta information>
  

您仍然可以通过指定子文档来索引 MongoDB 中的地理位置:

> db.geo.createIndex('geo.geometry': '2dsphere')

请注意,2.4 不再受支持,2.6 及更高版本对 2dsphere 索引进行了重大改进,其中包括索引更多 GeoJSON 类型的能力(请参阅https://docs.mongodb.com/v3.2/core/2dsphere/#dsphere-version-2)。目前最新的 MongoDB 版本是 3.4.0。

【讨论】:

感谢您的意见。至于版本,我在 Raspbian Jessie 中使用 MongoDB,通过apt-get 提供的唯一版本是 2.4.x 版本。据我所知,最新版本的 MongoDB 在 ARM 上不受官方支持。一旦我转移到生产环境,我显然会升级。我只是想确保我没有在原型设计的早期就误伤自己。

以上是关于如何在 MongoDB 2.4.x 中存储附加数据以使其符合 geoJSON 格式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 将字符附加到 MongoDB 文档中的字符串

将项目附加到 PyMongo 中的 MongoDB 文档数组而不重新插入

在 MongoDB (rmongodb) 中附加 BSON 数组

在 MongoDB 中使用 $group 时如何在返回文档中获取附加字段?

Trello 如何在 MongoDB 中存储数据? (每板收集?)

我应该如何在 mongodb / nosql 中存储数据?