geopesquisa
Nesta página
geoSearch
Importante
Removido no MongoDB 5.0
O MongoDB 5.0 remove o índice
geoHaystack
obsoleto e o comandogeoSearch
. 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 dogeoHaystack
preexistentes.O comando
geoSearch
fornece uma interface para a funcionalidade de índice do MongoDB. Esses índices são úteis para retornar resultados com base em coordenadas de localização após a coleta de resultados com base em alguma outra query (ou seja, um "palhaço").O comando
geoSearch
aceita um documento que contém os seguintes campos.CampoTipoDescriçãogeoSearch
stringA collection a ser consultada.search
documentoquery para filtrar documento.near
arrayCoordenadas de um ponto.maxDistance
númeroOpcional. Distância máxima do ponto especificado.limit
númeroOpcional. Número máximo de documentos a retornar.readConcern
documentoOpcional. Especifica a read concern.
A opção
readConcern
tem a seguinte sintaxe:readConcern: { level: <value> }
Os possíveis níveis de read concern são:
"local"
. Esse é o read concern padrão para operações de leitura em relação ao primário e secundários."available"
. Disponível para operações de leitura em relação às primárias e secundárias."available"
se comporta da mesma forma que"local"
em relação aos secundários primários e não fragmentados. A query retorna os dados mais recentes da instância."majority"
. Disponível para conjuntos de réplica que usam o mecanismo de armazenamento WiredTiger."linearizable"
. Disponível apenas para operações de leitura noprimary
.
Para obter mais informações sobre os read concern, consulte Níveis de read concern.
Para obter mais informações sobre os níveis de referência de leitura, consulte Níveis de referência de leitura.
comment
anyOpcional. Um comentário fornecido pelo usuário para anexar a este comando. Depois de definido, esse comentário aparece junto com os registros desse comando nos seguintes locais:
mensagens de log do mongod, no campo
attr.command.cursor.comment
.Saída do perfil do banco de dados, no campo
command.comment
.Saída de
currentOp
, no campocommand.comment
.
Um comentário pode ser qualquer tipo BSON válido (string, inteiro, objeto, array etc).
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Este comando não é suportado em instâncias sem servidor. Para obter mais informações, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Comportamento
Limite
A menos que especificado de outra forma, o comando geoSearch
limita os resultados a 50 documentos.
Clusters fragmentados
geoSearch
não é suportado para clusters fragmentados.
Transações
geoSearch
pode ser usado dentro de transações distribuídas.
Importante
Na maioria dos casos, uma transação distribuída incorre em um custo de desempenho maior do que as gravações de um único documento, e a disponibilidade de transações distribuídas não deve substituir o design eficaz do esquema. Em muitos cenários, o modelo de dados desnormalizado (documentos e arrays incorporados) continuará a ser ideal para seus dados e casos de uso. Ou seja, para muitos cenários, modelar seus dados adequadamente minimizará a necessidade de transações distribuídas.
Para considerações adicionais sobre o uso de transações (como limite de tempo de execução e limite de tamanho do oplog), consulte também Considerações de produção.
Exemplos
Considere o seguinte exemplo:
db.runCommand({ geoSearch : "places", near: [ -73.9667, 40.78 ], maxDistance : 6, search : { type : "restaurant" }, limit : 30 })
O comando acima retorna todos os documento com uma type
de restaurant
com uma distância máxima de 6 unidades a partir das coordenadas [ -73.9667, 40.78 ]
na collection places
até um máximo de 30 resultados.
Substituir o Padrão Atenção com a Leitura
Para substituir o nível de preocupação de leitura padrão do "local"
, utilize a opção readConcern
.
A operação a seguir em um conjunto de réplicas especifica uma read concern de "majority"
para ler a cópia mais recente dos dados confirmados como gravados na maioria dos nós.
Observação
Independentemente do nível de read concern, os dados mais recentes em um nó podem não refletir a versão mais recente dos dados no sistema.
db.runCommand( { geoSearch: "places", near: [ -73.9667, 40.78 ], search : { type : "restaurant" }, readConcern: { level: "majority" } } )
Para garantir que um único thread possa ler suas próprias gravações, use "majority"
read concern e "majority"
write concern em relação ao primário do conjunto de réplicas.