Docs Menu
Docs Home
/ /
Etapas de la pipeline de agregación

$match (agregación)

$match

Filtra los documentos para pasar solo los documentos que coinciden con las condiciones especificadas a la siguiente etapa del proceso.

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.

La etapa $match tiene la siguiente forma de prototipo:

{ $match: { <query> } }

$match toma un documento que especifica las condiciones de consulta. La sintaxis de consulta es idéntica a la de la operación de lectura; es decir, $match no acepta expresiones de agregación sin formato. En su lugar, utilice una $expr expresión de consulta para incluir la expresión de $match agregación en.

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.

  • La $match sintaxis de consulta es idéntica a la de la operación de lectura; es decir, $match no acepta expresiones de agregación sin formato. Para incluir una expresión de agregación en,$match utilice una $expr expresión de consulta:

    { $match: { $expr: { <aggregation expression> } } }
  • No se puede utilizar $where en consultas como parte del proceso de $match agregación.

  • No se pueden usar $near ni $nearSphere en consultas como parte del flujo de agregación. Como alternativa, se $match puede:

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

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

  • Para utilizar $text en la $match etapa, la etapa debe ser la primera etapa del $match pipeline.

    Las vistas no son compatibles con $text.

    Nota

    $text Proporciona funciones de consulta de texto para implementaciones autogestionadas (no Atlas). Para los datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de consulta de texto completo: Atlas Search.

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

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

Los ejemplos utilizan una colección llamada articles con los siguientes documentos:

{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }
{ "_id" : ObjectId("55f5a192d4bede9ac365b257"), "author" : "ahn", "score" : 60, "views" : 1000 }
{ "_id" : ObjectId("55f5a192d4bede9ac365b258"), "author" : "li", "score" : 55, "views" : 5000 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b259"), "author" : "annT", "score" : 60, "views" : 50 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b25a"), "author" : "li", "score" : 94, "views" : 999 }
{ "_id" : ObjectId("55f5a1d3d4bede9ac365b25b"), "author" : "ty", "score" : 95, "views" : 1000 }

La siguiente operación utiliza para realizar una coincidencia de igualdad $match simple:

db.articles.aggregate(
[ { $match : { author : "dave" } } ]
);

El $match selecciona los documentos donde el campo author es igual a dave, y la agregación devuelve lo siguiente:

{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 }
{ "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }

El siguiente ejemplo selecciona documentos para procesar utilizando el operador de pipeline $match y luego canaliza los resultados al operador de pipeline $group para calcular un conteo del documento:

db.articles.aggregate( [
{ $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );

En el pipeline de agregación, $match selecciona los documentos donde el score es mayor que 70 y menor que 90, o el views es mayor o igual que 1000. Estos documentos se canalizan al $group para realizar un conteo. La agregación devuelve lo siguiente:

{ "_id" : null, "count" : 5 }

Tip

Volver

$lookup

En esta página