我应该使用哪个索引进行 $geoWithin 搜索?

Posted

技术标签:

【中文标题】我应该使用哪个索引进行 $geoWithin 搜索?【英文标题】:Which index should I use for $geoWithin searching? 【发布时间】:2015-05-25 15:59:37 【问题描述】:

我正在使用以下条件按位置查询文档

db.collection.find(
    "location": 
        "$geoWithin": 
            "$box": [
                [165.8694369, -52.61941849999999],
                [-175.831536, -29.2313419]
            ]
        
    
);

2d2dsphere 应该为位置字段使用哪种索引类型?

【问题讨论】:

【参考方案1】:

引用documentation

查询使用平面(平面)几何计算距离。

在 2.2.3 版中更改:应用程序可以在没有地理空间索引的情况下使用 $box。但是,地理空间索引支持比未索引的等价物更快的查询。在 2.2.3 之前,地理空间索引必须存在于保存坐标的字段上,然后才能使用任何地理空间查询运算符。

只有二维地理空间索引支持 $box。


球形

要计算类地球球体上的几何形状,请将您的位置数据存储在球面上并使用 2dsphere 索引。

将您的位置数据存储为具有此坐标轴顺序的 GeoJSON 对象:经度、纬度。 GeoJSON 的坐标参考系统使用 WGS84 基准。


要计算欧几里得平面上的距离,请将您的位置数据存储为旧坐标对并使用二维索引。

【讨论】:

感谢您的回复。但是 $box 只是一个示例,因此我可以将 $geometry 与 Poligon 一起使用 @Erik 你可能需要阅读this 感谢您的参考,但我还不明白应该使用平面还是球形来进行查询? @Erik 在我的回答中添加了更多信息

以上是关于我应该使用哪个索引进行 $geoWithin 搜索?的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用哪个第三方搜索引擎(免费)?

如何从 mongodb 通过 Geowithin 获取匹配的子文档?

MongoDB:使用 $geoWithin 运算符没有得到正确的结果

TYPO3:清除索引搜索缓存

MongoDB:使用$ geoWithin运算符无法获得正确的结果

使用哪个索引