Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

$match (agregação)

$match

Filtra documentos com base em umpredicado de consulta especificado. Os documentos correspondentes são passados 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

{ $match: { <query predicate> } }

A sintaxe do predicado de query $match é idêntica à sintaxe usada no argumento de query de um comando find().

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.

  • Você não pode usar $where em um estágio $match .

  • Você não pode usar $near ou $nearSphere em um estágio $match. Como alternativa, você pode:

  • Para usar $text em um 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.

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. A execução de$matchapós$searché menos eficiente que a execução de$searchcom a opção de operador composto filter.

Para saber mais sobre a filter opção,consulte Operador 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:

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 }

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 int Runtime { get; set; }
public string Title { get; set; }
public string Rated { get; set; }
public List<string> Genres { get; set; }
public string Plot { get; set; }
public ImdbData Imdb { get; set; }
public int Year { get; set; }
public int Index { get; set; }
public string[] Comments { get; set; }
[BsonElement("lastupdated")]
public DateTime LastUpdated { get; set; }
}

Observação

Pacote de Convenções para Caso Pascal

As propriedades na classe anterior são nomeadas em maiúsculas e minúsculas Pascal, mas os nomes dos campo na coleção do MongoDB usam camel case. Para contabilizar esta diferença, você pode utilizar o seguinte código para registrar um ConventionPack quando seu aplicação iniciar:

var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);

Para usar o driver MongoDB .NET/C# para adicionar um estágio $match a um pipeline de agregação, chame o método Match() em um objeto PipelineDefinition.

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":

var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(m => m.Title == "The Shawshank Redemption");

Consulte os Tutoriais de Pipeline de Agregação Completo para obter mais informações e casos de uso sobre a agregação.

Voltar

$lookup

Receber um selo de habilidade

Domine "Fundamentos da transformação de dados" gratuitamente!

Saiba mais

Nesta página