Overview
En esta guĆa, puedes aprender a utilizar el driver de Rust para ejecutar consultas de bĆŗsqueda de MongoDB en una colección. MongoDB Search permite realizar bĆŗsquedas de texto completo en colecciones alojadas en MongoDB Atlas. Los Ćndices de bĆŗsqueda de MongoDB Search especifican el comportamiento de la bĆŗsqueda y los campos que se deben indexar.
Datos de muestra
El ejemplo de esta guĆa utiliza la colección movies en la base de datos sample_mflix de los Conjuntos de datos de muestra de Atlas. Para aprender a crear un clĆŗster gratuito de MongoDB Atlas y cargar los datasets de muestra, consulta la guĆa Primeros Pasos con Atlas.
Ejecuta una MongoDB Search query
Esta sección muestra cómo crear una pipeline de agregación para ejecutar una MongoDB Search query en una colección.
Para ejecutar una consulta de MongoDB Search, debes crear un Ćndice de MongoDB Search en tu colección. Para aprender a crear de forma programĆ”tica un Ćndice de MongoDB Search, consulta la sección Ćndices de MongoDB Search y Vector Search de la guĆa Ćndices. Puedes reemplazar el marcador <search index name> en los ejemplos de código de esta guĆa con el nombre de tu Ćndice MongoDB Search.
Tras crear un Ćndice de MongoDB Search, aƱade la etapa $search en tu arreglo de etapas de la pipeline para especificar los criterios de bĆŗsqueda. Luego, llama al mĆ©todo aggregate() y pasa el arreglo del pipeline como parĆ”metro.
Tip
Para obtener mĆ”s información sobre las operaciones de agregación, consulta la guĆa de Agregación.
MongoDB Search Ejemplo
Este ejemplo ejecuta una MongoDB Search al realizar las siguientes acciones:
Crea una etapa
$searchque indica al driver que haga queries para documentos en los que el campotitlecontenga la palabra"Alabama"Crea una etapa
$projectque instruya al driver para incluir el campotitleen los resultados de la query.Pasa las etapas de la pipeline al mƩtodo
aggregate()e imprime los resultados
use mongodb::{ bson::{doc, Document}, Client, Collection, }; use futures::stream::TryStreamExt; async fn main() -> mongodb::error::Result<()> { // Replace the uri string with your connection string let uri = "<connection string uri>"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Document> = client .database("sample_mflix") .collection("movies"); // Defines the MongoDB Search query let pipeline = vec![ doc! { "$search": { "index": "<search index name>", "text": { "query": "Alabama", "path": "title" } } }, doc! { "$project": { "title": 1, "_id": 1 } } ]; // Runs the aggregation pipeline let mut cursor = my_coll.aggregate(pipeline).await?; // Prints the results while let Some(doc) = cursor.try_next().await? { println!("{}", doc); } Ok(()) }
{ "_id": ObjectId("..."), "title": "Alabama Moon" } { "_id": ObjectId("..."), "title": "Crazy in Alabama" } { "_id": ObjectId("..."), "title": "Sweet Home Alabama" }
MongoDB Search metadatos
Utiliza la etapa $searchMeta de la pipeline para crear una etapa de agregación $searchMeta, que devuelve solo los metadatos de los resultados de MongoDB Search.
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.
El siguiente ejemplo muestra cómo recuperar metadatos para una etapa de agregación de MongoDB Search:
use mongodb::{ bson::{doc, Document, DateTime}, Client, Collection, }; use futures::stream::TryStreamExt; async fn main() -> mongodb::error::Result<()> { // Replace the uri string with your connection string let uri = "<connection string uri>"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Document> = client .database("sample_mflix") .collection("movies"); // Defines the $searchMeta pipeline stage let pipeline = vec![ doc! { "$searchMeta": { "index": "<search index name>", "near": { "path": "released", "origin": DateTime::parse_rfc3339_str("2011-09-01T00:00:00.000Z") .unwrap(), "pivot": 7776000000i64 } } } ]; let mut cursor = my_coll.aggregate(pipeline).await?; while let Some(doc) = cursor.try_next().await? { println!("{}", doc); } Ok(()) }
{ "count": 3, "hits": [ { "id": ObjectId("..."), "score": 1.0 }, { "id": ObjectId("..."), "score": 1.0 }, { "id": ObjectId("..."), "score": 1.0 } ] }
Crear etapas de bĆŗsqueda en pipeline
El driver de Rust de MongoDB proporciona métodos asistentes y desarrolladores para crear etapas de pipeline de MongoDB Search. Estos asistentes permiten construir consultas de búsqueda complejas utilizando el sistema de tipos de Rust para obtener una mayor seguridad en tiempo de compilación.
MongoDB Search Operadores
El controlador de Rust admite los siguientes operadores de búsqueda de MongoDB mediante la construcción de documentos BSON:
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 especificas. | |
Verifica si existe una ruta hacia un nombre de campo indexado especificado en un documento. | |
Para consultas geogrÔficas que permiten la búsqueda por ubicación. | |
Devolver los fragmentos de texto que coincidan con los criterios de búsqueda, útil para interfaces de usuario que necesitan resaltar términos de búsqueda. | |
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. | |
Admite consultas y puntuaciones de valores numƩricos, de fecha y de string. | |
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
Nota
Conjunto de datos de muestra de 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, 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 MongoDB Search, consulte la sección Ćndices de MongoDB Search y Vector Search de la guĆa Ćndices.
Puedes reemplazar el marcador de posición <search index name> en el código con el nombre de tu MongoDB Search Ćndice.
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"
use mongodb::{ bson::{doc, Document}, Client, Collection, }; use futures::stream::TryStreamExt; async fn main() -> mongodb::error::Result<()> { // Replace the uri string with your connection string let uri = "<connection string uri>"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Document> = client .database("sample_mflix") .collection("movies"); // Creates a complex search using multiple operators let search_stage = doc! { "$search": { "index": "<search index name>", "compound": { "must": [ { "equals": { "path": "genres", "value": "Comedy" } }, { "phrase": { "path": "fullplot", "query": "new york" } }, { "range": { "path": "year", "gte": 1950, "lte": 2000 } }, { "wildcard": { "path": "title", "query": "Love*" } } ] } } }; let project_stage = doc! { "$project": { "title": 1, "year": 1, "genres": 1, "_id": 1 } }; let pipeline = vec![search_stage, project_stage]; let mut cursor = my_coll.aggregate(pipeline).await?; while let Some(doc) = cursor.try_next().await? { println!("{}", doc); } Ok(()) }
{ "_id": ObjectId("..."), "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979 } { "_id": ObjectId("..."), "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994 }
Para saber mÔs sobre los operadores de MongoDB Search, consulta la documentación de Operadores de MongoDB Search.
Construcción de query tipo segura
El MongoDB Rust Driver proporciona métodos auxiliares type-safe para crear consultas de MongoDB Search. Estos asistentes utilizan el sistema de tipos de Rust para proporcionar validación en tiempo de compilación y un mejor soporte para el IDE en comparación con la construcción de documentos BSON en bruto.
El siguiente ejemplo construye una consulta de autocompletar con seguridad de tipo utilizando el módulo atlas_search:
use mongodb::atlas_search; let cursor = collection.aggregate(vec![ atlas_search::autocomplete("title", "pre") .fuzzy(doc! { "maxEdits": 1, "prefixLength": 1, "maxExpansions": 256 }) .into_stage(), doc! { "$limit": 10, }, doc! { "$project": { "_id": 0, "title": 1, } }, ]).await?;
La query en el ejemplo anterior realiza las siguientes operaciones:
Utiliza el mƩtodo
autocomplete()para buscar tĆtulos que comiencen con"pre"Se utiliza el mĆ©todo
fuzzy()para aƱadir tolerancia a errores tipogrĆ”ficos con parĆ”metros especĆficos:maxEditsEstablece el nĆŗmero mĆ”ximo de cambios de caracteres permitidos en1prefixLengthConjunto: Establece el nĆŗmero de caracteres al principio que deben coincidir exactamente con1maxExpansionsEstablece el nĆŗmero mĆ”ximo de variaciones a considerar para256
Utiliza el mƩtodo
into_stage()para generar el documento BSON$searchadecuadoLimita la salida a
10documentosDevuelve solo el campo
title, excluyendo_id
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: