Definição
$matchFiltra documentos com base em um predicado de consulta especificado. Os documentos correspondentes são passados para a próxima etapa do pipeline.
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
{ $match: { <query predicate> } }
A sintaxe do predicado de query $match é idêntica à sintaxe usada no argumento de query de um comando find().
Comportamento
Otimização de pipeline
Coloque o o mais
$matchcedo possível no agregação pipeline. Como o limita o número total$match$matchde documentos no pipeline de agregação , as operações de anteriores minimizam a quantidade de processamento no pipe.Se você colocar no início de um
$matchpipeline, a query poderá aproveitar os índices como qualquer outrodb.collection.find()db.collection.findOne()ou.
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
Você não pode usar
$whereem um estágio$match.Você não pode usar
$nearou$nearSphereem um estágio$match. Como alternativa, você pode:Use o
$geoWithinoperador de predicado de query com$centerou$centerSphereno$matchestágio.
Para usar
$textem um$matchestágio, o estágio deve ser o primeiro do$matchpipeline.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 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$matchapós$searchtem menos desempenho do que executar$searchcom a opção Operador composto filter.
Para saber mais sobre a opção filter, consulte o operador composto na documentação do Atlas.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Correspondência de qualidade
A operação a seguir usa para realizar uma correspondência de igualdade $match no rated campo. O runtime filtro limita o resultado a um conjunto pequeno e representativo:
db.movies.aggregate( [ { $match : { rated : "TV-PG", runtime : { $gt: 1000 } } } ] )
O seleciona os documentos onde $match o rated campo é igual a "TV-PG" e runtime é maior 1000 que.
Fazer uma contagem
O exemplo a seguir seleciona documentos a serem processados usando o $match operador de pipeline e, em seguida, encaminha os resultados para o $group operador de pipeline para calcular a contagem dos documentos:
db.movies.aggregate( [ { $match: { $or: [ { runtime: { $gt: 1000 } }, { year: { $lt: 1910 } } ] } }, { $group: { _id: null, count: { $sum: 1 } } } ] )
[ { _id: null, count: 6 } ]
No agregação pipeline, seleciona os documentos em$match que runtime é maior que 1000 ou em que year é anterior 1910 a. Esses documentos são então enviados para para a realização da $group contagem.
Elementos da matriz de correspondência
Para filtrar document com base em elementos em um campo de array, use o operador $elemMatch no predicado de query do estágio $match:
db.aggregate( [ { $documents: [ { student_id: 1, scores: [ 0.75, 0.65, 0.73 ] }, { student_id: 2, scores: [ 0.9, 0.88, 0.98 ] }, { student_id: 3, scores: [ 0.9, 0.84, 0.93 ] } ] }, { $match: { scores: { $elemMatch: { $gte: 0.9 } } } } ] )
[ { student_id: 2, scores: [ 0.9, 0.88, 0.98 ] }, { student_id: 3, scores: [ 0.9, 0.84, 0.93 ] } ]
Os exemplos de C# nesta página utilizam o banco de dados sample_mflix a partir dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de exemplo, consulte Introdução na documentação do driver MongoDB .NET/C#.
A seguinte classe Movie modela os documentos na collection sample_mflix.movies:
[] public class Movie { [] public ObjectId Id { get; set; } [] public string Title { get; set; } = null!; [] public int? Year { get; set; } [] public int? Runtime { get; set; } [] public string? Rated { get; set; } [] public int Metacritic { get; set; } [] public string? Plot { get; set; } [] public string? Type { get; set; } [] public string[]? Cast { get; set; } [] public string[]? Directors { get; set; } [] public string[]? Writers { get; set; } [] public ImdbData? Imdb { get; set; } }
Para usar o driver MongoDB .NET/C# para adicionar um $match estágio a uma agregação pipeline, chame o método unionWith() em um PipelineDefinition objeto.
O exemplo a seguir cria um estágio de pipeline que corresponde a todos os documentos Movie em que o campo Title é igual a "The Godfather":
var pipeline = new EmptyPipelineDefinition<Movie>() .Match(m => m.Title == "The Godfather");
{ "_id" : "...", "title" : "The Godfather", "metacritic" : 100, "rated" : "R", "runtime" : 175, "imdb" : "..." }
Os exemplos do Node.js nesta página utilizam o banco de dados do sample_mflix a partir dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de exemplo, consulte Introdução na documentação do driver do MongoDB Node.js
Para usar o driver Node.js do MongoDB para adicionar um estágio $match a um pipeline de agregação , use o operador $match em um objeto de pipeline.
O exemplo a seguir cria um estágio de pipeline que corresponde a todos os documentos movie em que o campo title é igual a "The Shawshank Redemption". O exemplo em seguida executa o pipeline de agregação:
const pipeline = [ { $match: { title: "The Shawshank Redemption" } } ]; const cursor = collection.aggregate(pipeline); return cursor;
Saiba mais
Consulte os Tutoriais do pipeline de agregação completo para obter mais informações e casos de uso sobre agregação.