geoSearchImportante
Eliminado en MongoDB 5.0
MongoDB 5.0 elimina el obsoleto Índice geoHaystack y comando.
geoSearch2Utilice un índice d con o$geoNearuno de los operadores de consulta geoespaciales compatibles.Actualizar su instancia de MongoDB a 5.0 y configurar featureCompatibilityVersion en
5.0eliminará cualquier índice geoHaystack preexistente.El comando
geoSearchproporciona una interfaz para la funcionalidad índice Haystack de MongoDB. Estos índices son útiles para devolver resultados en función de coordenadas de ubicación después de recopilar resultados en función de alguna otra query (es decir, un "haystack").El comando
geoSearchacepta un documento que contiene los siguientes campos.CampoTipoDescripcióngeoSearchstring
La colección a consultar.
searchDocumento
Consulta para filtrar documentos.
neararreglo
Coordenadas de un punto.
maxDistanceNúmero
Opcional. Distancia máxima desde el punto especificado.
limitNúmero
Opcional. Número máximo de documentos a devolver.
readConcernDocumento
Opcional. Especifica el nivel de consistencia de lectura.
La opción
readConcerntiene la siguiente sintaxis:readConcern: { level: <value> }Los posibles niveles de consistencia de lectura son estos:
"local"Este es el nivel de consistencia de lectura por defecto para las operaciones de lectura contra el primario y los secundarios."available". Disponible para operaciones de lectura en el primario y los secundarios."available"se comporta de la misma manera que"local"contra el primario y los secundarios no particionados. La query devuelve los datos más recientes de la instancia."majority". Disponible para Sets de réplicas que utilizan el motor de almacenamiento WiredTiger."linearizable". Disponible solo para operaciones de lectura enprimary.
Para obtener más información sobre los niveles de consistencia de lectura, consulta Nivel de consistencia de lectura.
Para obtener más información sobre los niveles de preocupación de lectura, consulte Niveles de preocupación de lectura.
commentany
Opcional. Un comentario proporcionado por el usuario para adjuntar a este comando. Una vez configurado, este comentario aparece junto a los registros de este comando en las siguientes ubicaciones:
Mensajes de registro de mongod, en el campo
attr.command.cursor.comment.Salida del perfilador de base de datos, en el campo
command.comment.currentOpde salida, en el campocommand.comment.
Un comentario puede ser de cualquier tipo BSON válido (string, objeto, arreglo, etc.).
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB
MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.
Comportamiento
Limit
A menos que se especifique lo contrario, el geoSearch comando limita los resultados a 50 documentos.
Clústeres fragmentados
geoSearch No es compatible con clústeres fragmentados.
Transacciones
geoSearch puede usarse dentro de transacciones distribuidas.
Importante
En la mayoría de los casos, una transacción distribuida incurre en un costo de rendimiento mayor que las escrituras de documentos individuales, y la disponibilidad de transacciones distribuidas no debería ser un sustituto para un diseño de esquema efectivo. Para muchos casos, el modelo de datos desnormalizado (documento incrustado y matrices) seguirá siendo óptimo para tus datos y casos de uso. Es decir, en muchos casos, modelar tus datos de forma adecuada minimizará la necesidad de transacciones distribuidas.
Para consideraciones adicionales sobre el uso de transacciones (como el límite de tiempo de ejecución y el límite de tamaño del oplog), consulta también las consideraciones de producción.
Ejemplos
Considera el siguiente ejemplo:
db.runCommand({ geoSearch : "places", near: [ -73.9667, 40.78 ], maxDistance : 6, search : { type : "restaurant" }, limit : 30 })
El comando anterior devuelve todos los documentos con un type de restaurant que tengan una distancia máxima de 6 unidades desde las coordenadas [ -73.9667, 40.78 ] en la colección places hasta un máximo de 30 resultados.
Anular el nivel de consistencia de lectura por defecto
Para anular el nivel de consistencia de lectura por defecto de "local", usa la opción readConcern.
La siguiente operación en un set de réplicas especifica un nivel de consistencia de lectura de "majority" para leer la copia más reciente de los datos confirmados como están escritos en la mayoría de los nodos.
Nota
Independientemente del nivel de consistencia de lectura, es posible que los datos más recientes de un nodo no reflejen la versión más reciente de los datos en el sistema.
db.runCommand( { geoSearch: "places", near: [ -73.9667, 40.78 ], search : { type : "restaurant" }, readConcern: { level: "majority" } } )
Para asegurarte de que un solo hilo pueda leer sus propias escrituras, utiliza el nivel de consistencia de lectura "majority" y el nivel de confirmación de escritura "majority" contra el primario del set de réplicas.