Overview
En esta guía, puede aprender a usar el controlador Kotlin para ejecutar Consultas deMongoDB Search en una colección. MongoDB Search permite realizar búsquedas de texto completo en colecciones alojadas en MongoDB. Los índices de MongoDB Search especifican el comportamiento de la búsqueda y los campos que se indexan.
Datos de muestra
Los ejemplos de esta guía utilizan el movies Colección en la sample_mflix base de datos de los conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte la guía de introducción. Para obtener más información sobre las operaciones de agregación y los generadores, consulte la Guíade agregación.
Ejecutar una consulta de búsqueda de MongoDB
Esta sección muestra cómo crear una canalización de agregación para ejecutar una consulta de búsqueda de MongoDB en una colección. Puede usar el método de compilación Aggregates.search() para crear una etapa de canalización $search, que especifica los criterios de búsqueda. A continuación, llame al método aggregate() y pase su canalización como parámetro.
Nota
Solo disponible en Atlas para MongoDB v4.2 y versiones posteriores
Este operador de canalización de agregación solo está disponible para colecciones alojadas en clústeres de MongoDB Atlas con la4.2 versión 7900 o posterior que estén cubiertos por un índice de MongoDB Search. Obtenga más información sobre la configuración necesaria y la funcionalidad de este operador en la documentación de MongoDB Search.
Antes de ejecutar una consulta de búsqueda de MongoDB, debe crear un índice de búsqueda de MongoDB en su colección. Para aprender a crear un índice de búsqueda de MongoDB mediante programación, consulte la sección "Índices de búsqueda de MongoDB y de búsqueda vectorial de MongoDB" en la guía de índices.
Ejemplo de búsqueda en MongoDB
Antes de poder ejecutar este ejemplo, debe crear un índice de búsqueda de MongoDB en la colección de películas que tenga la siguiente definición:
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "string" } } } }
Este ejemplo ejecuta una consulta de búsqueda de MongoDB realizando las siguientes acciones:
Construye una etapa
$searchutilizando el método de construcciónAggregates.search(), indicando al controlador que consulte documentos en los que el campotitlecontenga la palabra"Alabama"Construye una etapa
$projectutilizando el método de construcciónAggregates.project(), indicando al controlador que incluya el campotitleen los resultados de la consultaPasa las etapas de la canalización al método
aggregate()e imprime los resultados
val pipeline: List<Bson> = listOf( search(SearchOperator.text( fieldPath("title"), "Alabama")), project(Projections.include("title")) ) val results = collection.aggregate(pipeline) results.collect { doc -> println(doc.toJson()) }
{"_id": {"$oid": "..."}, "title": "Alabama Moon"} {"_id": {"$oid": "..."}, "title": "Crazy in Alabama"} {"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}
Metadatos de búsqueda de MongoDB
Utilice el searchMeta() método para crear una etapa de canalización $searchMeta, que devuelve solo los metadatos de los resultados de búsqueda de texto completo de Atlas.
Tip
Solo disponible en Atlas para MongoDB v4.4.11 y posteriores
Este operador de canalización de agregación solo está disponible en clústeres MongoDB Atlas que ejecutan v4.4.11 y versiones posteriores.
Antes de poder ejecutar este ejemplo, debe crear un índice de búsqueda de MongoDB en la colección de películas que tenga la siguiente definición:
{ "mappings": { "dynamic": false, "fields": { "year": { "type": "number" } } } }
El siguiente ejemplo muestra los metadatos near para una etapa de agregación de búsqueda de MongoDB:
searchMeta( SearchOperator.near(2010, 1, fieldPath("year")) )
Crear etapas de búsqueda de canalización
El controlador Kotlin proporciona métodos auxiliares para los siguientes operadores:
Operador | Descripción |
|---|---|
Realiza una búsqueda de una palabra o frase que contenga una secuencia de caracteres de una cadena de entrada incompleta. | |
Combina dos o más operadores en una sola consulta. | |
Comprueba si un campo coincide con el valor especificado. Se asigna a los métodos | |
Comprueba si existe una ruta a un nombre de campo indexado específico en un documento. | |
Realiza una búsqueda de una matriz de valores BSON de número, fecha, booleano, objectId, uuid o cadena en la ruta indicada y devuelve documentos donde el valor del campo es igual a cualquier valor en la matriz especificada. | |
Devuelve documentos similares a los documentos de entrada. | |
Admite la consulta y puntuación de valores numéricos, de fecha y de puntos GeoJSON. | |
Realiza una búsqueda de documentos que contienen una secuencia ordenada de términos utilizando el analizador especificado en la configuración del índice. | |
Brinda soporte a las queries de una combinación de campos indexados y valores. | |
Admite la consulta y puntuación de valores numéricos, de fecha y de cadena. Se asigna a los métodos | |
Interpreta el campo de consulta como una expresión regular. | |
Realiza una búsqueda de texto completo utilizando el analizador que especifique en la configuración del índice. | |
Permite consultas que utilizan caracteres especiales en la cadena de búsqueda que pueden coincidir con cualquier carácter. |
Ejemplo de etapa de búsqueda en el pipeline
Nota
Conjunto de datos de muestra del Atlas
Este ejemplo utiliza la colección sample_mflix.movies de los conjuntos de datos de muestra de Atlas. Para aprender cómo configurar un clúster de Atlas de nivel gratuito y cargar el conjunto de datos de muestra, consulta el tutorial Empezar con Atlas en la documentación de Atlas.
Antes de poder ejecutar este ejemplo, debe crear un índice de búsqueda de MongoDB en la colección movies que tenga la siguiente definición:
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
Para obtener más información sobre la creación de índices de búsqueda de MongoDB, consulte la sección Índices de búsqueda de MongoDB y de búsqueda vectorial de MongoDB de la guía Índices.
El siguiente código crea una etapa $search que tiene las siguientes especificaciones:
Comprueba que la matriz
genresincluye"Comedy"Busca en el campo
fullplotla frase"new york"Coincide con
yearvalores entre1950y2000, inclusiveBusca
titlevalores que comiencen con el término"Love"
val searchStage = Aggregates.search( SearchOperator.compound() .filter( listOf( SearchOperator.`in`(fieldPath("genres"), listOf("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard(fieldPath("title"), "Love *") ) ) ) val projectStage = Aggregates.project( Projections.include("title", "year", "genres")) val pipeline = listOf(searchStage, projectStage) val results = collection.aggregate(pipeline)
{"_id": ..., "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979} {"_id": ..., "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994}
Para obtener más información sobre los métodos auxiliares de búsqueda de MongoDB, consulte la referencia de la interfaz SearchOperator en la documentación de la API de Driver Core.
Información Adicional
Para obtener más información sobre MongoDB Search, consulte MongoDB Search en la documentación de Atlas.
Documentación de la API
Para obtener más información sobre los métodos mencionados en esta guía, consulte la siguiente documentación de API: