Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Ejecuta una MongoDB Search query

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

El ejemplo de esta guía utiliza el movies colección 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 conjuntos de datos de muestra, consulta la guía Empieza con Atlas.

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 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 MongoDB Search and Vector Search Indexes sección de la guía de Índices. Puede reemplazar el marcador de posición <search index name> en los ejemplos de código de esta guía con el nombre de su í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.

Este ejemplo ejecuta una MongoDB Search al realizar las siguientes acciones:

  • Crea una etapa $search que indica al controlador que consulte documentos en los que el campo title contiene la palabra "Alabama"

  • Crea una etapa $project que instruya al driver para incluir el campo title en 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;
#[tokio::main]
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"
}

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 canalización de agregación solo está disponible en clústeres MongoDB Atlas que ejecutan v4.4.11 y versiones 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;
#[tokio::main]
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
}
]
}

El controlador de MongoDB para Rust proporciona métodos auxiliares y constructores para crear etapas de la canalización de búsqueda de MongoDB. Estos ayudantes permiten construir consultas de búsqueda complejas utilizando el sistema de tipos de Rust para una mayor seguridad en tiempo de compilación.

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 cadena de entrada incompleta.

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

Verifica si un campo coincide con un valor que especificas.

Comprueba si existe una ruta a un nombre de campo indexado específico 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 especifique en la configuración del índice.

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

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 la creación de índices de búsqueda de MongoDB, consulte la sección Índices de búsqueda de MongoDB y de búsqueda vectorial de la guía Índices.

Puede reemplazar el marcador de posición <search index name> en el código con el nombre de su índice de búsqueda 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 title valores que comiencen con el término "Love"

use mongodb::{
bson::{doc, Document},
Client, Collection,
};
use futures::stream::TryStreamExt;
#[tokio::main]
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.

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 consulta del ejemplo anterior realiza las siguientes operaciones:

  1. Utiliza el método autocomplete() para buscar títulos que comiencen con "pre"

  2. 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 en 1

    • prefixLengthConjunto: Establece el número de caracteres al principio que deben coincidir exactamente con 1

    • maxExpansionsEstablece el número máximo de variaciones a considerar para 256

  3. Utiliza el método into_stage() para generar el documento BSON $search adecuado

  4. Limita la salida a 10 documentos

  5. Devuelve solo el campo title, excluyendo _id

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, consulte la siguiente documentación de API:

Volver

Índices de MongoDB Search y búsqueda vectorial

En esta página