Criar um ÍndiceHaystack
Importante
Removido no MongoDB 5.0
O MongoDB 5.0 remove o índice geoHaystack obsoleto e o comando geoSearch
. Em vez disso, use um 2d index com $geoNear
ou um dos geospatial query operators compatíveis.
Atualizar sua instância MongoDB para 5.0 e configurar featureCompatibilityVersion para 5.0
excluirá quaisquer índices geoHaystack preexistentes.
Um índice haystack deve fazer referência a dois campos: o campo de localização e um segundo campo. O segundo campo é usado para correspondências exatas. Os índices de haystack retornam documentos com base na localização e em uma correspondência exata em um único critério adicional. Esses índices não são necessariamente adequados para retornar os documentos mais próximos de um local específico.
Para construir um índice do palheiro, utilize a seguinte sintaxe:
db.coll.createIndex( { <location field> : "geoHaystack" , <additional field> : 1 } , { bucketSize : <bucket value> } )
Para construir um índice haystack, você deve especificar a opção bucketSize
ao criar o índice. Um bucketSize
de 5
cria um índice que agrupa valores de localização que estão dentro 5 unidades da longitude e latitude especificadas. O bucketSize
também determina a granularidade do índice. Você pode ajustar o parâmetro para a distribuição de seus dados para que, em geral, você pesquise somente regiões muito pequenas. As áreas definidas por buckets podem se sobrepor. Um documento pode existir em vários buckets.
Exemplo
Se você tiver uma collection com documentos que contenham campos semelhantes aos seguintes:
{ _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"}
As operações a seguir criam um índice haystack com buckets que armazenam chaves dentro de 1 unidade de longitude ou latitude.
db.places.createIndex( { pos : "geoHaystack", type : 1 } , { bucketSize : 1 } )
Esse índice armazena o documento com um campo _id
que tem o valor 200
em dois buckets diferentes:
Em um bucket que inclui o documento onde o campo
_id
tem valor de100
Em um bucket que inclui o documento onde o campo
_id
tem valor de300
Para executar uma query usando um índice do palheiro, use o comando geoSearch
. Consulte Fazer query de um índice do palheiro.
Por padrão, as queries que usam um índice do palheiro retornam 50 documentos.