Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$match (agregação)

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Comportamento
  • Otimização de pipeline
  • Expressões em predicados de query
  • 0, valores nulos, falsos ou ausentes
  • Restrições
  • Filtrar dados no Atlas usando o Atlas Search
  • Exemplos
  • Correspondência de qualidade
  • Fazer uma contagem
$match

Filtra os documentos para passar apenas aqueles que correspondem às condições especificadas para a próxima etapa do pipeline.

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

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.

Para incluir expressões em um predicado de query, use o operador $expr.

Um estágio $match filtra um documento dos resultados do pipeline se uma das seguintes condições se aplicar:

  • O predicado de query $match retorna um valor 0, null ou false nesse documento.

  • O predicado de query $match utiliza um campo ausente desse documento.

  • A sintaxe de query $match é idêntica à sintaxe de query de operação de leitura; ou seja, $match nã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 $where em queries $match como parte do pipeline de agregação.

  • Não é possível usar $near nem $nearSphere em queries $match como parte do pipeline de agregação. Como alternativa, você pode:

  • Para usar $text no estágio $match, o estágio $match deve ser o primeiro estágio do pipeline.

    As visualizações não suportam $text.

    Observação

    $text fornece 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.

Em dados armazenados no MongoDB Atlas, você pode usar a opção do operador composto filter do Atlas Search para encontrar correspondentes ou filtrar documentos ao executar queries $search. Executar $match primeiro e $search depois é menos eficiente do que executar $search com a opção filter de operador composto.

Para saber mais sobre a opção filter, consulte composto na documentação do Atlas.

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 }

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 }

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 }

Dica

Veja também:

Voltar

$lookup