Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

$match (estágio de 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 sistemas autogerenciados (não Atlas). Para dados hospedados no MongoDB, o MongoDB também oferece uma solução de query de texto completo aprimorada, MongoDB Search.

Para dados armazenados no MongoDB Atlas, você pode usar a opção filter do MongoDB Search compound Operator para corresponder ou filtrar documentos ao executar $search queries. A execução de $match após $search é menos eficiente que a execução de $search com a opção de operador composto filter.

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

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.

A operação a seguir usa $match para realizar uma correspondência de igualdade no campo rated. O filtro runtime limita o resultado a um conjunto pequeno e representativo:

db.movies.aggregate(
[ { $match : { rated : "TV-PG", runtime : { $gt: 1000 } } } ]
)

O $match seleciona os documentos onde o campo rated é igual a "TV-PG" e runtime é maior que 1000.

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.movies.aggregate( [
{ $match: { $or: [
{ runtime: { $gt: 1000 } },
{ year: { $lt: 1910 } }
] } },
{ $group: { _id: null, count: { $sum: 1 } } }
] )
[ { _id: null, count: 6 } ]

No pipeline de agregação, $match seleciona os documents em que runtime é maior que 1000 ou year é anterior a 1910. Esses documentos são então enviados para $group para realizar a contagem.

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

ConventionPack para Pascal Case

As classes C# nesta página usam Pascal case para seus nomes de propriedade, mas os nomes de campo na coleção MongoDB usam Camel case. Para considerar essa diferença, você pode usar o seguinte código para registrar um ConventionPack quando o aplicativo 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");

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;

Consulte os Tutoriais do pipeline de agregação completo para obter mais informações e casos de uso sobre agregação.

Voltar

$lookup

Receber um selo de habilidade

Domine "Os fundamentos da transformação de dados" gratuitamente!

Saiba mais

Nesta página