Docs 菜单

Docs 主页开发应用程序MongoDB Manual

创建 Haystack 索引

重要

已在 MongoDB 5.0 中删除

干草堆索引必须引用两个字段:位置字段和第二个字段。第二个字段用于精确匹配。 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 索引