创建 Haystack 索引
重要
已在 MongoDB 5.0 中删除
MongoDB 5.0删除了已弃用的 geoHaystack索引和 geoSearch
命令。 请改用带有 的2 d索引 $geoNear
或受支持的 地理空间查询运算符 之一。
将 MongoDB 实例升级到 5.0 并将 FeatureCompatibilityVersion 设置为 5.0
会删除所有先前存在的 geoHaystack 索引。
干草堆索引必须引用两个字段:位置字段和第二个字段。 第二个字段用于精确匹配。 Haystack 根据位置以及单个附加条件的精确匹配对返回文档进行索引。 这些索引不一定适合返回距离特定位置最近的文档。
要构建干草堆索引,请使用以下语法:
db.coll.createIndex( { <location field> : "geoHaystack" , <additional field> : 1 } , { bucketSize : <bucket value> } )
要构建干草堆索引,必须在创建索引时指定bucketSize
选项。 bucketSize
的5
会创建一个索引,该索引会对指定经度和纬度的5单位内的位置值进行分组。 bucketSize
还决定了索引的粒度。 您可以根据数据的分布调整参数,这样通常只搜索非常小的区域。 存储桶定义的区域可以重叠。 一份文档可以存在于多个存储桶中。
例子
如果您有一个集合,其中的文档包含类似于以下内容的字段:
{ _id : 100, pos: { lng : 126.9, lat : 35.2 } , type : "restaurant"} { _id : 200, pos: { lng : 127.5, lat : 36.1 } , type : "restaurant"} { _id : 300, pos: { lng : 128.0, lat : 36.7 } , type : "national park"}
以下操作创建一个干草堆索引,其中包含存储经度或纬度1单位以内的键的存储桶。
db.places.createIndex( { pos : "geoHaystack", type : 1 } , { bucketSize : 1 } )
此索引将带有值为200
的_id
字段的文档存储在两个不同的存储桶中:
在包含
_id
字段值为100
的文档的存储桶中在包含
_id
字段值为300
的文档的存储桶中
要使用干草堆索引进行查询,请使用geoSearch
命令。 请参阅查询 Haystack 索引。
默认,使用干草堆索引的查询返回50文档。