Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Ejecutar consultas de búsqueda de MongoDB

En esta guía, aprenderá a usar el controlador de Scala para ejecutar consultas de búsqueda de MongoDB en una colección. La búsqueda de MongoDB permite realizar búsquedas de texto completo en las colecciones. Los índices de búsqueda de MongoDB especifican el comportamiento de la búsqueda y los campos que se indexarán.

Para aprender a crear y administrar índices de búsqueda de MongoDB mediante el controlador Scala, consulte la guía de índices de búsqueda de MongoDB y de búsqueda vectorial de MongoDB.

Los ejemplos de esta guía utilizan la colección movies en la base de datos sample_mflix de los conjuntos de datos de ejemplo de Atlas. Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulta Comienza con Atlas.

Nota

MongoDB Search está disponible en las siguientes implementaciones:

  • MongoDB Atlas v4.2 o posterior

  • MongoDB Community Edition v8.2 o posterior

Para ejecutar consultas de búsqueda de MongoDB, su colección debe tener un índice de búsqueda de MongoDB. Para obtener información sobre cómo crear un índice de búsqueda de MongoDB, consulte la guía de índices de búsqueda de MongoDB y de búsqueda vectorial de MongoDB.

Para realizar una búsqueda de texto completo, llame al método aggregate() con una etapa de canalización $search. El controlador de Scala proporciona el método auxiliar Aggregates.search() para crear esta etapa. El método search() requiere los siguientes argumentos:

  • SearchOperator instancia que especifica el campo y el texto a buscar

  • SearchOptions instancia que especifica opciones para personalizar la búsqueda, incluido el nombre del índice de búsqueda de MongoDB que se utilizará.

El siguiente ejemplo busca el texto "Alabama" en el campo title y proyecta solo el campo _id, que se incluye por defecto, y el campo title de los documentos coincidentes:

val operator = SearchOperator.text(
SearchPath.fieldPath("title"), "Alabama")
val options = searchOptions().index("<search index name>")
val pipeline = Seq(
Aggregates.search(operator, options),
Aggregates.project(Projections.include("title"))
)
try {
Await
.result(collection.aggregate(pipeline).toFuture(), 20.seconds)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"_id": {"$oid": "..."}, "title": "Alabama Moon"}
{"_id": {"$oid": "..."}, "title": "Crazy in Alabama"}
{"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}

Tip

Para ver los tutoriales de búsqueda de MongoDB en la documentación de Atlas, consulte Ejecutar consultas de búsqueda de Atlas.

Nota

Los metadatos de búsqueda de MongoDB están disponibles en las siguientes implementaciones:

  • MongoDB Atlas v4.4.11 o posterior

  • MongoDB Community Edition v8.2 o posterior

Utilice el método auxiliar Aggregates.searchMeta() para recuperar únicamente los metadatos de una consulta de búsqueda de MongoDB sin devolver los resultados de la búsqueda. El siguiente ejemplo devuelve los metadatos de una consulta que busca en el campo year valores cercanos a 2010:

try {
Await
.result(
collection.aggregate(Seq(
Aggregates.searchMeta(
SearchOperator.near(2010, 1, SearchPath.fieldPath("year")))
)).toFuture(),
20.seconds
)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"count": {"lowerBound": 35}}

El driver Scala 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 cómo crear índices de búsqueda de MongoDB, consulte la guía de índices de búsqueda de MongoDB y de búsqueda vectorial de MongoDB.

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()
.must(
Iterable(
SearchOperator.in(fieldPath("genres"), List("Comedy")),
SearchOperator.phrase(fieldPath("fullplot"), "new york"),
SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000),
SearchOperator.wildcard("Love *", fieldPath("title")),
).asJava
)
)
val projectStage = Aggregates.project(
Projections.include("title", "year", "genres"))
try {
Await
.result(
collection.aggregate(Seq(searchStage, projectStage)).toFuture(),
20.seconds
)
.foreach((doc: Document) => println(doc.toJson()))
} catch {
case e: Throwable => println(s"There was an error: $e")
}
{"_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 la búsqueda en MongoDB, consulte la sección "Descripción general de la búsqueda en MongoDB" en la documentación de Atlas.

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