Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
$match (agregação)
Nesta página
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 MongoDB na nuvem
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão código-disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O estágio $match
tem o seguinte formato de protótipo:
{ $match: { <query> } }
$match
pega um documento que especifica as condições da query. A sintaxe de consulta é idêntica à sintaxe de consulta da operação de leitura ; ou seja, $match
não aceita expressões de aggregation brutas. Em vez disso, use uma $expr
expressão query para incluir a expressão aggregation em $match
.
Comportamento
Otimização de pipeline
Coloque
$match
o mais cedo possível no aggregation pipeline . Como o$match
limita o número total de documentos no pipeline de agregação, as operações$match
anteriores minimizam a quantidade de processamento no pipeline.Se você colocar
$match
no início de um pipeline, a query poderá aproveitar os índices como qualquer outrodb.collection.find()
oudb.collection.findOne()
.
Restrições
A sintaxe de query
$match
é idêntica à sintaxe de query da operação de leitura ; ou seja,$match
não aceita expressões de aggregation brutas. Para incluir uma expressão de aggregation em$match
, use uma expressão de query$expr
:{ $match: { $expr: { <aggregation expression> } } } Não é possível usar
$where
em queries$match
como parte do aggregation pipeline.Não é possível usar
$near
nem$nearSphere
em queries$match
como parte do aggregation pipeline. Como alternativa, você pode:Use
$geoWithin
operador de query com$center
ou$centerSphere
no estágio$match
.
Para usar
$text
no estágio$match
, o estágio$match
deve ser o primeiro do pipeline.Os modos de exibição não oferecem suporte à pesquisa de texto.
Filtrar dados no Atlas usando o Atlas Search
Para dados armazenados no MongoDB Atlas, você pode usar a opção filter
do operador composto do Atlas Search para corresponder ou filtrar documentos ao executar queries $search
. Executar $match
após $search
tem menos desempenho do que executar $search
com a opção de operador composto filter
.
Para saber mais sobre a opção filter
, consulte 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" } } ] );
$match
seleciona os documentos onde o campo author
é igual a dave
, e a aggregation 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 aggregation pipeline, $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 aggregation retorna o seguinte:
{ "_id" : null, "count" : 5 }
Informações adicionais
Consulte as páginas a seguir para obter mais informações e casos de uso sobre aggregation.