Overview
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.
Datos de muestra
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.
Ejecuta una MongoDB Search query
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 $search operador de canalización de agregación solo estĆ” disponible para colecciones alojadas en clĆŗsteres de MongoDB Atlas que ejecutan MongoDB4 v.2 o posterior, o en clĆŗsteres de MongoDB Community Edition que ejecutan MongoDB8 v.2 o posterior. Las colecciones deben estar cubiertas por un Ćndice de MongoDB Search. Para obtener mĆ”s información sobre la configuración necesaria y la funcionalidad de este operador, consulte la documentación de MongoDB Search.
Antes de ejecutar una query de MongoDB Search, debe crear un Ćndice de MongoDB Search en su colección. Para aprender a crear un Ćndice de MongoDB Search mediante programación, consulte la sección Gestión del Ćndice de bĆŗsqueda de MongoDB de la guĆa de Ćndices.
MongoDB Search Ejemplo
Este ejemplo ejecuta una consulta de MongoDB Search realizando las siguientes acciones:
Construye una
$searchetapa utilizando elAggregates.search()mĆ©todo constructor, lo que indica al controlador que busque documentos en los que eltitlecampo contenga la"Alabama"palabra. Para obtener mĆ”s información sobre los operadores que puede utilizar en la$searchetapa, consulte la sección Ā«Crear etapas de bĆŗsqueda de canalizaciónĀ» de esta guĆa.Construye una etapa
$projectutilizando el método de construcciónAggregates.project(), instruyendo al driver para que incluya el campotitleen los resultados de la queryPasa 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"}
MongoDB Search metadatos
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 canalización de agregación solo estÔ disponible en clústeres de MongoDB Atlas que ejecutan la versión4 411 9.10.11 o posterior, o en clústeres de MongoDB Community Edition que ejecutan8 la2 versión 21.22 o posterior. Para obtener una lista detallada de las versiones disponibles, consulte la documentación de MongoDB Atlas sobre $searchMeta.
El siguiente ejemplo muestra los metadatos de near para una etapa de agregación de MongoDB Search, que devuelve el número de documentos con un valor de campo de year dentro de 1 año 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().
Crear etapas de bĆŗsqueda en pipeline
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 | |
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 | |
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. |
Ejemplo de etapa de bĆŗsqueda en el pipeline
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
genresincluya"Comedy"Busca en el campo
fullplotla frase"new york"Coincide con
yearvalores entre1950y2000, ambos inclusiveBusca valores de
titleque 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.
Información Adicional
Para obtener mÔs información sobre MongoDB Search, consulte la 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, consulta la siguiente documentación de la API: