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

MongoDB búsqueda

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

Los ejemplos de esta guía utilizan la movies colección sample_mflix de la base de datos de los conjuntos de datos de ejemplo de Atlas. Para aprender a crear una implementación gratuita de MongoDB y cargar los conjuntos de datos de ejemplo, consulte la guía de introducción a MongoDB. Para obtener más información sobre las operaciones y los constructores de agregación, consulte la guía del marco de agregación.

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

Atlas y requisitos de versión de Community Edition

El operador $search pipeline de agregación está disponible únicamente para colecciones alojadas en clústeres de MongoDB Atlas que ejecutan MongoDB v4.2 o posterior, o en clústeres de MongoDB Community Edition que ejecutan MongoDB v8.2 o posterior. Las colecciones deben estar cubiertas por un índice de búsqueda MongoDB. Para obtener más información sobre la configuración necesaria y la funcionalidad de este operador, consulta 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 «Administración de índices de búsqueda de MongoDB» en la guía de índices.

Este ejemplo ejecuta una consulta de MongoDB Search realizando las siguientes acciones:

  • Construye una $search etapa utilizando el Aggregates.search() método constructor, lo que indica al controlador que busque documentos en los que el title campo contenga la "Alabama" palabra. Para obtener más información sobre los operadores que puede utilizar en la $search etapa, consulte la sección «Crear etapas de búsqueda de canalización» de esta guía.

  • 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

Publisher<Document> publisher = collection.aggregate(
List.of(
Aggregates.search(SearchOperator.text(
SearchPath.fieldPath("title"), "Alabama")),
Aggregates.project(Projections.include("title"))
)
);
Flux.from(publisher)
.doOnNext(doc -> System.out.println(doc.toJson()))
.blockLast();
{"_id": {"$oid": "..."}, "title": "Alabama Moon"}
{"_id": {"$oid": "..."}, "title": "Crazy in Alabama"}
{"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}

Utilice el Aggregates.searchMeta() método para crear una etapa de canalización $searchMeta, que devuelve solo los metadatos de los resultados de la búsqueda de MongoDB.

Nota

Atlas y requisitos de versión de Community Edition

Este operador de pipeline de agregación está disponible solo en MongoDB Atlas clústeres que ejecuten la v4.4.11 y posteriores, o en MongoDB Community Edition clústeres con MongoDB v8.2 o posterior. Para obtener una lista detallada de la disponibilidad de las versiones, consulta la documentación de MongoDB Atlas sobre $searchMeta.

El siguiente ejemplo muestra los metadatos near para una etapa de agregación de búsqueda de MongoDB, que devuelve el número de documentos con un valor de campo year dentro de los 1 años de 2010:

Aggregates.searchMeta(
SearchOperator.near(2010, 1, fieldPath("year")));
Document{{count=Document{{lowerBound=21326}}}}

Para aprender más sobre este método asistente, consultar la documentación de la API searchMeta().

El driver de Java Reactive Streams proporciona métodos asistente 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 sección Gestión del índice de búsqueda de MongoDB 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"

List<Bson> pipeline = List.of(
Aggregates.search(
SearchOperator.compound()
.filter(
List.of(
SearchOperator.in(fieldPath("genres"), List.of("Comedy")),
SearchOperator.phrase(fieldPath("fullplot"), "new york"),
SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000),
SearchOperator.wildcard(fieldPath("title"), "Love *")
))),
Aggregates.project(
Projections.include("title", "year", "genres")
));
Publisher<Document> publisher = collection.aggregate(pipeline);
Flux.from(publisher)
.doOnNext(doc -> System.out.println(doc.toJson()))
.blockLast();
{"_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: