Definición
Compatibilidad
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.
Sintaxis
La etapa $match tiene la siguiente forma de prototipo:
{ $match: { <query> } }
$match toma un documento que especifica las condiciones de query. La sintaxis de la query es idéntica a la sintaxis de la query de la operación de lectura; es decir, $match no acepta expresiones de agregación en bruto. En su lugar, utilice una expresión de query $expr para incluir la expresión de agregación en $match.
Comportamiento
Optimización del pipeline
Coloqcar el
$matchlo más temprano posible en el pipeline de agregación. Debido a que$matchlimita el número total de documentos en el pipeline de agregación, las operaciones anteriores$matchminimizan la cantidad de procesamiento posterior.Si colocas un
$matchal principio de un pipeline, el query puede aprovechar los índices como cualquier otrodb.collection.find()odb.collection.findOne().
Expresiones en predicados de query
Para incluir expresiones en un predicado de query, utiliza el operador $expr.
0, valores nulos, falsos o faltantes
Una etapa $match filtra un documento de los resultados del pipeline si se aplica una de las siguientes condiciones:
El predicado de query
$matchdevuelve un valor0,nullofalseen ese documento.El predicado de query
$matchutiliza un campo que falta en ese documento.
Restricciones
La
$matchsintaxis de consulta es idéntica a la de la operación de lectura; es decir,$matchno acepta expresiones de agregación sin formato. Para incluir una expresión de agregación en,$matchutilice una$exprexpresión de consulta:{ $match: { $expr: { <aggregation expression> } } } No puedes usar
$whereen$matchqueries como parte de la pipeline de agregación.No se pueden usar
$nearni$nearSphereen consultas como parte del flujo de agregación. Como alternativa, se$matchpuede:Utilice el operador del query
$geoWithincon$centero$centerSphereen la etapa$match.
Para usar
$texten la etapa$match, la etapa$matchdebe ser la primera etapa de la pipeline.Las vistas no son compatibles con
$text.Nota
$textproporciona 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.
Filtra datos en Atlas utilizando Atlas búsqueda
Para los datos almacenados en MongoDB Atlas, puedes usar el Atlas Search operador compuesto opción filter para hacer coincidir o filtrar documentos al ejecutar consultas $search. Ejecutar $match después de $search es menos eficiente que ejecutar $search con el operador compuesto operador filter opción.
Para obtener más información sobre la opción filter, consulta operador compuesto en la documentación de Atlas.
Ejemplos
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 }
Coincidencia exacta
La siguiente operación utiliza $match para realizar una coincidencia exacta:
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 }
Realizar un recuento
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 }