Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Ejecuta una MongoDB Search query

En esta guía, puedes aprender cómo usar el controlador de Kotlin para ejecutar MongoDB Search consultas de búsqueda en una colección. MongoDB Search te permite realizar búsquedas de texto completo en las colecciones alojadas en MongoDB. Los índices de MongoDB Search especifican el comportamiento de la búsqueda y qué campos se deben indexar.

Los ejemplos de esta guía utilizan el movies colección en la base de datos sample_mflix de los Conjuntos de datos de muestra de Atlas. Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta la guía Get Started . Para obtener más información sobre las operaciones de agregación y desarrolladores, consulta la agregación guide.

Esta sección muestra cómo crear una pipeline de agregación para ejecutar una consulta de MongoDB Search en una colección. Puedes utilizar el método builder Aggregates.search() para crear una etapa $search en la pipeline que especifique los criterios de búsqueda. Luego, llama al método aggregate() y pasa tu pipeline como parámetro.

Nota

Disponible solo en Atlas para MongoDB v4.2 y posteriores

Este operador de pipeline de agregación sólo está disponible para colecciones alojadas en clústeres MongoDB Atlas que ejecuten la versión v4.2 o posterior y que están cubiertas por un Índice de MongoDB Search. Obtén más información sobre la configuración requerida y la funcionalidad de este operador en la documentación de MongoDB Search.

Antes de ejecutar una query de MongoDB Search, debes crear un índice de MongoDB Search en tu colección. Para aprender a crear programáticamente un índice de búsqueda en MongoDB, consulta la sección MongoDB Search y MongoDB Vector Search Indexes en la guía de índices.

Antes de que puedas ejecutar este ejemplo, debes crear un índice de búsqueda 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 MongoDB Search realizando las siguientes acciones:

  • Construye una etapa $search utilizando el método de desarrollador Aggregates.search() e instruye al driver a hacer queries a documentos en los que el campo title contiene la palabra "Alabama"

  • Construye una etapa $project utilizando el método de construcción Aggregates.project(), instruyendo al driver para que incluya el campo title en los resultados de la query

  • Pasa las etapas de la pipeline 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"}

Utilice el método searchMeta() para crear una $searchMeta etapa de pipeline, que retorna solo los metadatos de los resultados de la búsqueda de texto completo de Atlas.

Tip

Solo disponible en Atlas para MongoDB v4.4.11 y posteriores

Este operador de pipeline de agregación solo está disponible en clústeres MongoDB Atlas que ejecuten v4.4.11 y posteriores.

Antes de que puedas ejecutar este ejemplo, debes crear un índice de búsqueda 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 MongoDB Search:

searchMeta(
SearchOperator.near(2010, 1, fieldPath("year"))
)

El driver de Kotlin proporciona métodos asistentes para los siguientes operadores:

Operador
Descripción

Realiza una búsqueda de una palabra o frase que contenga una secuencia de caracteres de una string de entrada incompleta.

Combina dos o más operadores en una única query.

Verifica si un campo coincide con un valor que especificaste. Se asigna a los métodos equals() y equalsNull().

Verifica si existe una ruta hacia un nombre de campo indexado especificado en un documento.

Realiza una búsqueda de un arreglo de valores de número, fecha, booleano, objectId, uuid o string BSON en la ruta determinada y retorna documentos donde el valor del campo coincide con cualquier valor en el arreglo especificado.

Devuelve documentos similares a los documentos de entrada.

Permite consultar y puntuar valores numéricos, fechas y valores 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.

Permite la consulta y la calificación de valores numéricos, de fecha y de string. Se asigna a los métodos numberRange() y dateRange().

Interpreta el campo de query como una expresión regular.

Realiza una búsqueda de texto completo utilizando el analizador que se especifique en la configuración del índice.

Permite consultas que utilizan caracteres especiales en la string de búsqueda que pueden coincidir con cualquier carácter.

Antes de que puedas ejecutar este ejemplo, debes 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 MongoDB Search, consulte la sección Índices de MongoDB Search y MongoDB Vector Search de la guía de Índices.

El siguiente código crea un escenario $search que tiene las siguientes especificaciones:

  • Comprueba que el arreglo genres incluya "Comedy"

  • Busca en el campo fullplot la frase "new york"

  • Coincide con year valores entre 1950 y 2000, ambos inclusive

  • Busca valores de title 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 asistente de MongoDB Search, consulta la referencia de la interfaz SearchOperator en la documentación de Core API del driver.

Para obtener más información sobre MongoDB Search, consulte la MongoDB Search en la documentación de Atlas.

Para obtener más información sobre los métodos mencionados en esta guía, consulta la siguiente documentación de la API:

Volver

Ejecute un comando de base de datos

En esta página