Olá, e aí preparados para criarem mais uma Aggregation? Esperamos que sim, hoje a nossa aggregation irá listar todas as campanhas/cupons utilizados em um determinado período de tempo e ordená-los pelo número de pedidos.
Se esse é seu primeiro contato com aggregations por aqui, no final desse tópico iremos deixar uma lista de outros tópicos sobre esse assunto. Mas sem mais delongas, pegue seu café e vamos lá …
REALIZAR A AGGREGATION
Como já vimos em outros tópicos, precisamos de algumas informações importantes antes mesmo de realizarmos busca na nossa API . O ID da loja, ID da sua autenticação e o token, são algumas das informações necessárias para realizarmos a nossa busca, caso tenha dificuldades de onde encontrar tais dados, sugerimos que veja o primeiro tópico sobre aggregations (Como criar agrupamentos de dados, Aggregation), pois este tópico contém um passo-a-passo mais detalhado de como obter essas informações.
As aggregations são requisições realizadas no endpoint https://api.e-com.plus/v1/$aggregate.json da nossa API utilizando o método POST
, como já vimos anteriormente em outros tópicos. Além disso nossa requisição irá conter em seu Header (ou cabeçalho) os seguintes dados:
- X-Store-ID: Id_da_sua_loja
- X-Access-Token: seu_token_atualizado
- X-My-ID: id_da_sua_autenticacao
Obs: Para a realização da requisição na nossa API, iremos utilizar aqui o Hoppscotch (https://hoppscotch.io/ ).
O segredo das nossas aggregations está no body (ou corpo), sendo composto por um objeto contendo as propriedades resource e pipeline, sendo esse último a propriedade que irá filtrar a nossa busca para atingirmos o nosso resultado esperado, já o resource que irá identificar qual collection iremos analisar, que nesse caso será orders.
Então vamos para a construção do pipeline.
PIPELINE DA AGGREGATION
É sempre importante lembrar que o pipeline é uma lista de estágios, que irão filtrar a nossa busca, para que possamos alcançar nosso resultado esperado. Nosso primeiro objetivo aqui é listar todos os orders (pedidos) em um determinado período que utilizaram alguma campanha. O período utilizado aqui no nosso exemplo é do dia 1 de janeiro de 2022 até o dia 3 de novembro de 2022:
{
"$match" : {
"created_at": {"$gte" : "2022-01-01T00:00:00.000Z", "$lte" : "2022-11-03T23:59:59.999Z"},
"utm.campaign": {"$exists": true}
}
}
Em seguida vamos agrupar os pedidos pelo nome da campanha e quantificar quantos pedidos foram feitos utilizando essa campanha:
{
"$group":{
"_id": "$utm.campaign",
"count": {"$sum": 1}
}
}
E por último, mas não menos importante iremos ordenar de forma decrescente essas campanhas pelo número de pedidos
{
"$sort":{"count":-1}
}
BODY DA AGGREGATION
Considerando todas as informações descritas acimas nos construímos o seguinte body para nossa requisição:
{
"resource" : "orders",
"pipeline" : [
{
"$match" : {
"created_at": {"$gte" : "2022-01-01T00:00:00.000Z", "$lte" : "2022-10-27T00:00:00.000Z"},
"utm.campaign": {"$exists": true}
}
},
{
"$group":{
"_id": "$utm.campaign",
"count": {"$sum": 1}
}
},
{
"$sort":{"count":-1}
}
]
}
RESULTADO DA AGGREGATION
A nossa aggregation construída acima, produzirá um resultado semelhante ao seguir:
{
"result": [
{
"_id": "campanha2",
"count": 5
},
{
"_id": "campanha1",
"count": 4
},
{
"_id": "campanha4",
"count": 2
},
{
"_id": "campanha3",
"count": 2
}
]
}
Percebemos que o result da nossa requisição é uma lista no qual cada elemento contém um _id
sendo este o nome utilizado na campanha, ou melhor dizendo é o mesmo valor do utm.campaign, já o count é a quantidade de pedidos realizados com essa campanha.
Gostou desse tópico? Quer saber mais ? Segue abaixo a lista de outros tópicos sobre aggregations já postados por aqui.
-
Aggregation: Onde mostramos um passo a passo de como quantificar os aniversariantes de cada mês.
-
Aggregation, para lista de produtos mais pedidos em um determinado período.
-
Aggregation, Produtos mais abandonados em carrinho em determinado período.
E até a próxima pessoal :male_sign:.