我应该使用哪个索引进行 $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]
]
);
2d
或 2dsphere
应该为位置字段使用哪种索引类型?
【问题讨论】:
【参考方案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 运算符没有得到正确的结果