Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

创建 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选项。 bucketSize5会创建一个索引,该索引会对指定经度和纬度的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文档。

后退

geohaystack