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

$match (etapa de agregación)

$match

Filtra documentos en función de un predicado de query especificado. Los documentos que coinciden se pasan a la siguiente etapa del pipeline.

Puedes usar $match para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

{ $match: { <query predicate> } }

La sintaxis del predicado de query $match es idéntica a la sintaxis utilizada en el argumento query de un comando find().

Para incluir expresiones en un predicado de query, utiliza el operador $expr.

Una etapa $match filtra un documento de los resultados del pipeline si se aplica una de las siguientes condiciones:

  • El predicado de query $match devuelve un valor 0, null o false en ese documento.

  • El predicado de query $match utiliza un campo que falta en ese documento.

  • No puedes usar$where en una etapa $match.

  • No puede usar $near ni $nearSphere en una etapa $match. Como alternativa, puede elegir entre:

    • Utilice la etapa en $geoNear $match lugar de la etapa.

    • Utilice el operador de predicado de consulta$geoWithincon$centero$centerSphereen la etapa$match.

  • Para usar $text en una $match etapa, la etapa tiene que ser la primera etapa de la $match canalización.

    Las vistas no son compatibles con $text.

    Nota

    $text proporciona capacidades de query de texto para implementaciones autogestionadas (no pertenecientes a Atlas). Para los datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de búsqueda de texto completo, Búsqueda de Atlas.

Para los datos almacenados en MongoDB Atlas, puede usar la opción filter del operador compuesto de búsqueda de Atlas para buscar o filtrar documentos al ejecutar consultas$search. Ejecutar$matchdespués de$searchtiene un rendimiento inferior al de ejecutar$searchcon la opción filter del operador compuesto.

Para obtener más información sobre la opción filter, consulta operador compuesto en la documentación de Atlas.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

La siguiente operación utiliza para realizar una comparación de igualdad en $match el rated campo. El runtime filtro limita el resultado a un conjunto pequeño y representativo:

db.movies.aggregate(
[ { $match : { rated : "TV-PG", runtime : { $gt: 1000 } } } ]
)

El selecciona los documentos donde $match el rated campo "TV-PG" runtime es igual a y es mayor 1000 que.

El siguiente ejemplo selecciona los documentos que se van a procesar utilizando el $match operador de canalización y luego envía los resultados al $group operador de canalización para calcular el número de documentos:

db.movies.aggregate( [
{ $match: { $or: [
{ runtime: { $gt: 1000 } },
{ year: { $lt: 1910 } }
] } },
{ $group: { _id: null, count: { $sum: 1 } } }
] )
[ { _id: null, count: 6 } ]

En la canalización de agregación, selecciona los documentos$match donde runtime es mayor que 1000 o year es anterior 1910 a. Estos documentos se envían luego a para realizar un $group recuento.

Para filtrar documentos según los elementos de un campo de arreglo, utiliza el operador $elemMatch en el predicado de query de la etapa $match:

db.aggregate( [
{
$documents: [
{ student_id: 1, scores: [ 0.75, 0.65, 0.73 ] },
{ student_id: 2, scores: [ 0.9, 0.88, 0.98 ] },
{ student_id: 3, scores: [ 0.9, 0.84, 0.93 ] }
]
}, {
$match: {
scores: { $elemMatch: { $gte: 0.9 } }
}
}
] )
[
{ student_id: 2, scores: [ 0.9, 0.88, 0.98 ] },
{ student_id: 3, scores: [ 0.9, 0.84, 0.93 ] }
]

Los ejemplos de C# en esta página utilizan 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 Primeros pasos en la documentación del controlador de MongoDB .NET/C#.

La siguiente clase Movie modela los documentos en la colección sample_mflix.movies:

[BsonIgnoreExtraElements]
public class Movie
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("title")]
public string Title { get; set; } = null!;
[BsonElement("year")]
public int? Year { get; set; }
[BsonElement("runtime")]
public int? Runtime { get; set; }
[BsonElement("rated")]
public string? Rated { get; set; }
[BsonElement("metacritic")]
public int Metacritic { get; set; }
[BsonElement("plot")]
public string? Plot { get; set; }
[BsonElement("type")]
public string? Type { get; set; }
[BsonElement("cast")]
public string[]? Cast { get; set; }
[BsonElement("directors")]
public string[]? Directors { get; set; }
[BsonElement("writers")]
public string[]? Writers { get; set; }
[BsonElement("imdb")]
public ImdbData? Imdb { get; set; }
}

Para usar el controlador MongoDB.NET/C# para agregar una $match etapa a una canalización de agregación, llame al método UnionWith() en un PipelineDefinition objeto.

El siguiente ejemplo crea una plataforma del pipeline que coincide con todos los documentos Movie donde el campo Title es igual a "The Godfather":

var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(m => m.Title == "The Godfather");
{ "_id" : "...", "title" : "The Godfather", "metacritic" : 100, "rated" : "R", "runtime" : 175, "imdb" : "..." }

Los ejemplos de Node.js en esta página utilizan 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, consulte Primeros pasos en la documentación del controlador de MongoDB Node.js.

Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $match a una canalización de agregación, utilice el Operador $match en un objeto de canalización.

El siguiente ejemplo crea una plataforma de pipeline que coincide con todos los documentos movie donde el campo title es igual a "The Shawshank Redemption". A continuación, el ejemplo ejecuta el pipeline de agregación:

const pipeline = [
{
$match: {
title: "The Shawshank Redemption"
}
}
];
const cursor = collection.aggregate(pipeline);
return cursor;

Consulta los Tutoriales completos del pipeline de agregación para obtener más información y casos de uso sobre agregación.