Menu Docs
Página inicial do Docs
/ / /
Controlador Node.js
/

Subconjunto filtrado

Nesta página

  • Introdução
  • Resumo da tarefa de agregação
  • Antes de começar
  • Tutorial
  • Adicionar um estágio de partida para pessoas que são engenheiras
  • Adicione um estágio de classificação para ordenar do mais novo para o mais antigo
  • Adicione um estágio de limite para ver apenas três resultados
  • Adicione um estágio não definido para remover campos desnecessários
  • Executar o pipeline de agregação
  • Interpretar resultados

Neste tutorial, você pode aprender a usar o driver Node.js para criar um pipeline de agregação, realizar a agregação em uma coleção e imprimir os resultados concluindo e executando um aplicativo de amostra. Esta agregação executa as seguintes operações:

  • Corresponde a um subconjunto de documentos pelo valor de um campo

  • Formata documentos de resultado

Dica

Você também pode fazer query de um subconjunto de documentos em uma coleção usando a API de query. Para saber como especificar uma query, consulte osguias de operações de leitura .

Este tutorial demonstra como executar uma query em um subconjunto específico de documentos em uma coleção. Os resultados contém documentos acerca das três pessoas mais jovens que têm a Engenharia como profissão.

Este exemplo utiliza uma collection, persons, que contém documento que descrevem pessoas. Cada documento inclui o nome da pessoa, a data de nascimento, a função e outros detalhes.

Antes de iniciar este tutorial, conclua as instruções do Aggregation Template App para configurar um aplicação Node.js funcional.

Depois de configurar o aplicativo, acesse a coleção persons adicionando o seguinte código ao aplicativo:

const personColl = aggDB.collection("persons");

Exclua todos os dados existentes nas coleções e insira dados de amostra na coleção persons, conforme mostrado no código a seguir:

await personColl.deleteMany({});
const personData = [
{
person_id: "6392529400",
firstname: "Elise",
lastname: "Smith",
dateofbirth: new Date("1972-01-13T09:32:07Z"),
vocation: "ENGINEER",
address: {
number: 5625,
street: "Tipa Circle",
city: "Wojzinmoj",
},
},
{
person_id: "1723338115",
firstname: "Olive",
lastname: "Ranieri",
dateofbirth: new Date("1985-05-12T23:14:30Z"),
gender: "FEMALE",
vocation: "ENGINEER",
address: {
number: 9303,
street: "Mele Circle",
city: "Tobihbo",
},
},
{
person_id: "8732762874",
firstname: "Toni",
lastname: "Jones",
dateofbirth: new Date("1991-11-23T16:53:56Z"),
vocation: "POLITICIAN",
address: {
number: 1,
street: "High Street",
city: "Upper Abbeywoodington",
},
},
{
person_id: "7363629563",
firstname: "Bert",
lastname: "Gooding",
dateofbirth: new Date("1941-04-07T22:11:52Z"),
vocation: "FLORIST",
address: {
number: 13,
street: "Upper Bold Road",
city: "Redringtonville",
},
},
{
person_id: "1029648329",
firstname: "Sophie",
lastname: "Celements",
dateofbirth: new Date("1959-07-06T17:35:45Z"),
vocation: "ENGINEER",
address: {
number: 5,
street: "Innings Close",
city: "Basilbridge",
},
},
{
person_id: "7363626383",
firstname: "Carl",
lastname: "Simmons",
dateofbirth: new Date("1998-12-26T13:13:55Z"),
vocation: "ENGINEER",
address: {
number: 187,
street: "Hillside Road",
city: "Kenningford",
},
},
];
await personColl.insertMany(personData);
1

Primeiro, adicione um estágio $match que encontra documentos nos quais o valor do campo vocation é "ENGINEER":

pipeline.push({
$match: {
"vocation": "ENGINEER"
},
});
2

Em seguida, adicione um estágio $sort que classifica os documentos em ordem decrescente pelo campo dateofbirth para listar primeiro as pessoas mais jovens:

pipeline.push({
$sort: {
"dateofbirth": -1,
}
});
3

Em seguida, adicione um estágio $limit ao pipeline para produzir apenas os três primeiros documentos nos resultados.

pipeline.push({
$limit: 3
});
4

Finalmente, adicione um estágio $unset . O estágio $unset remove campos desnecessários dos documentos de resultado:

pipeline.push({
$unset: [
"_id",
"address",
]
});

Dica

Use o operador $unset, não o $project, para evitar modificar o pipeline de agregação caso documentos com campos diferentes sejam adicionados à coleção.

5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection persons :

const aggregationResult = await personColl.aggregate(pipeline);

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

node agg_tutorial.js
6

O resultado agregado contém três documentos. Os documentos representam as três pessoas mais jovens que têm a profissão de "ENGINEER". Os resultados são ordenados mostrando a pessoa mais jovem primeiro e a pessoa mais velha por último. Os resultados omitem os campos _id e address.

{
person_id: '7363626383',
firstname: 'Carl',
lastname: 'Simmons',
dateofbirth: 1998-12-26T13:13:55.000Z,
vocation: 'ENGINEER'
}
{
person_id: '1723338115',
firstname: 'Olive',
lastname: 'Ranieri',
dateofbirth: 1985-05-12T23:14:30.000Z,
gender: 'FEMALE',
vocation: 'ENGINEER'
}
{
person_id: '6392529400',
firstname: 'Elise',
lastname: 'Smith',
dateofbirth: 1972-01-13T09:32:07.000Z,
vocation: 'ENGINEER'
}

Para visualizar o código completo deste tutorial, consulte o Aplicativo de Subconjunto Filtrado Concluído no Github Github.

Voltar

Tutoriais de agregação