随着2.3> MongoDB对位置数据处理和查询变得更加有用。 MongoDB将文档存储为BSON,因此每个文档都具有所有文档字段,这显然可能导致比传统RMDBS更大的数据库。
我曾经将折线和多边形存储为一系列索引点,另外一个字段表示每一行的顺序(我正在这样做,以确保一致性,因为我使用JavaScript,所以点并不总是以正确的顺序存储)。这是这样的:
polyline: {
[
point: [0,0],
order: 0
],
[
point: [0,1],
order: 1
]
}
而现在我使用:
polyline: {
type: 'LineString',
coordinates: [
[0,0],
[1,0]
]
}
我看到文件大小有所改进,因为一些折线可以达到500点。
但是,我想知道将所有我的Point数据存储为GeoJSON的好处是什么。我对文件大小的增加感到灰心,例如:
loc: [1,0]
比方式好
loc: {
type: 'Point',
coordinates: [0,1]
}
并因此更容易使用。
我的问题是:
是否更好/推荐将点作为GeoJSON对象存储,而不是2点阵列?
我所考虑的是:
>大小限制:我可能有数百万个文档的位置,这可能会影响收藏的大小,并可能是我的口袋。
>一致性:处理lng,lat格式的每一组坐标,而不是粘贴到lat,lng为点,而对于我所有其他位置特征的前一个处理方式会更好。
>便利:如果我抓住一点,并使用$ geoWithin或$ geoIntersects,我将不需要将其转换为GeoJSON,然后再将其用作查询参数。
我不确定的是:
>是否支持loc:[x,y]将来会在MongoDB中被删除
>从2dsphere而不是2d的任何索引优势
>是否有任何计划的GeoJSON添加MongoDB可能会导致上述一致性的需要。
我宁愿移动到GeoJSON,而我的数据仍然可以管理,而不是在未来很多的压力。
请允许我一个彻底的问题(即使稍微)想一想。我不会很快选择正确的答案,所以我可以评估任何回应。
我也不知道SO是否是提出问题的正确的地方,所以如果DBA是一个更合适的地方,我会把问题移到那里。我选择了SO,因为这里有很多MongoDB的相关活动。