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
Introdução
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 .
Resumo da tarefa de agregação
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 começar
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);
Tutorial
Adicionar um estágio de partida para pessoas que são engenheiras
Primeiro, adicione um estágio $match que encontra documentos nos quais o valor do campo vocation
é "ENGINEER"
:
pipeline.push({ $match: { "vocation": "ENGINEER" }, });
Adicione um estágio de classificação para ordenar do mais novo para o mais antigo
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, } });
Adicione um estágio de limite para ver apenas três resultados
Em seguida, adicione um estágio $limit ao pipeline para produzir apenas os três primeiros documentos nos resultados.
pipeline.push({ $limit: 3 });
Adicione um estágio não definido para remover campos desnecessários
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.
Interpretar resultados
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.