Definição
Compatibilidade
Você pode utilizar o $match para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O estágio $match tem a seguinte forma de protótipo:
{ $match: { <query> } }
$match pega um documento que especifica as condições da query. A sintaxe da query é idêntica à sintaxe da query somente de leitura; ou seja, $match não aceita expressões de agregação bruta. Em vez disso, use uma expressão query $expr para incluir a expressão de agregação em $match.
Comportamento
Otimização de pipeline
Coloque
$matcho mais cedo possível no pipeline de agregação. Como o$matchlimita o número total de documento no pipe de agregação, as operações$matchanteriores minimizam a quantidade de processamento no pipe.Se você colocar
$matchno início de um pipeline, a query poderá aproveitar os índices como qualquer outrodb.collection.find()oudb.collection.findOne().
Expressões em predicados de query
Para incluir expressões em um predicado de query, use o operador $expr.
0, valores nulos, falsos ou ausentes
Um estágio $match filtra um documento dos resultados do pipeline se uma das seguintes condições se aplicar:
O predicado de query
$matchretorna um valor0,nulloufalsenesse documento.O predicado de query
$matchutiliza um campo ausente desse documento.
Restrições
A sintaxe de query
$matché idêntica à sintaxe de query de operação de leitura; ou seja,$matchnão aceita expressões brutas de agregação. Para incluir a expressão de agregação em$match, use uma expressão de query$expr:{ $match: { $expr: { <aggregation expression> } } } Não é possível usar
$whereem queries$matchcomo parte do pipeline de agregação.Não é possível usar
$nearnem$nearSphereem queries$matchcomo parte do pipeline de agregação. Como alternativa, você pode:Use o operador de query
$geoWithincom$centerou$centerSphereno estágio$match.
Para usar
$textno estágio$match, o estágio$matchdeve ser o primeiro estágio do pipeline.As visualizações não suportam
$text.Observação
$textfornece recursos de query de texto para implantações autogerenciadas (não Atlas). Para dados hospedados no MongoDB Atlas, o MongoDB oferece uma solução aprimorada de query de texto completo, Atlas Search.
Filtrar dados no Atlas usando o Atlas Search
Para dados armazenado no MongoDB Atlas, você pode usar a opção filter do operador composto do Atlas Search para fazer a correspondência ou filtrar documentos ao executar queries $search. A execução de $match após $search tem menos desempenho do que a execução de $search com a opção filter do operador composto.
Para saber mais sobre a opção filter, consulte o operador composto na documentação do Atlas.
Exemplos
Os exemplos utilizam uma collection chamada articles com os seguintes 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 }
Correspondência de qualidade
A operação a seguir usa $match para realizar uma correspondência de igualdade simples:
db.articles.aggregate( [ { $match : { author : "dave" } } ] );
O $match seleciona os documentos em que o campo author é igual a dave, e a agregação retorna o seguinte:
{ "_id" : ObjectId("512bc95fe835e68f199c8686"), "author" : "dave", "score" : 80, "views" : 100 } { "_id" : ObjectId("512bc962e835e68f199c8687"), "author" : "dave", "score" : 85, "views" : 521 }
Fazer uma contagem
O exemplo a seguir seleciona documentos a serem processados usando o operador de pipeline $match e, em seguida, encaminha os resultados para o operador de pipeline $group para calcular a contagem dos documentos:
db.articles.aggregate( [ { $match: { $or: [ { score: { $gt: 70, $lt: 90 } }, { views: { $gte: 1000 } } ] } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
No pipeline de agregação, $match seleciona os documentos em que score é maior que 70 e menor que 90 ou em que views é maior ou igual que 1000. Esses documentos são então encaminhados para $group para a realização da contagem. A agregação retorna o seguinte:
{ "_id" : null, "count" : 5 }