Olá, é a primeira vez que ouve falar em Aggregations por aqui? Sugerimos que dê uma olhada também nos nossos outros tópicos sobre o assunto.
-
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.
No nosso segundo tópico, aprendemos como construir uma aggregation para listar os produtos mais pedidos em um determinado período, a ideia da aggregation desse tópico é listar os produtos mais abandonados no carrinho de compra em um determinado período.
Então pegue seu café e vamos nessa ……
REALIZAR A AGGREGATION
Se essa não é sua primeira vez por aqui, você já sabe que vamos precisar de alguns dados importantes para realização da aggregation, mas se essa é sua primeira vez, saiba que iremos precisar das seguintes informações:
ID da loja, ID da sua autenticação e o token, caso tenha dificuldades de onde encontrar tais dados, sugerimos que veja o primeiro tópico sobre o assunto, pois este tópico contém um passo-a-passo mais detalhado de como obter essas informações.
Como já sabemos que 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
, contendo em seu Header 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/ ).
Além do endpoint, método e header, nossa requisição irá utilizar um body, como já mencionado em outros tópicos é o segredo das nossas aggregations, sendo esse body, composto por um resource e um pipeline. O resource que irá identificar qual collection iremos analisar, que nesse caso será carts. Já o pipeline irá filtrar através de estágios a nossa aggregation, para obtermos o nosso resultado esperado.
PIPELINE DA AGGREGATION
Nessa aggregation, iremos utilizar quatro estágios:
- 1º estágio: Iremos definir o período que queremos analisar e se o carrinho foi mesmo abandonado. Nesse exemplo estamos avaliando o período do dia 01-01-2022 à 24-08-2022, a propriedade que verificamos se o carrinho foi mesmo abandonado ou não é a completed, aqui verificamos se seu valor é falso.
"$match" : {
"created_at": {"$gte" : "2022-01-01T00:00:00.000Z", "$lte" : "2022-08-24T23:59:59.999Z"},
"completed": {"$eq": false}
}
- 2º estágio: Separamos nossos itens do carrinho, para que possamos contabilizar itens diferentes de um mesmo pedido.
"$unwind": "$items"
- 3º estágio: Aqui vamos agrupar os itens e contabilizá-los, sendo agrupados pelo _id, que é definido pelo id do produto, nome do produto e id da variação do produto (se houver) e a contabilização é feita um somatório de quantos carrinhos esse produto foi abandonado.
"$group": {
"_id": {
"product_id": "$items.product_id",
"name": "$items.name",
"variation_id": "$items.variation_id"
},
"count": {
"$sum": 1
}
}
- 4º estágio: Último e não menos importante o nosso estágio de ordenação, que irá ordenar nosso resultado em ordem decrescente, dos produtos que mais foram abandonados em carrinhos.
"$sort": {
"count": -1
}
BODY DA AGGREGATION
O body da nossa aggregation terá o seguinte formato:
{
"resource" : "carts",
"pipeline" : [
{
"$match" : {
"created_at": {"$gte" : "2022-01-01T00:00:00.000Z", "$lte" : "2022-08-24T23:59:59.999Z"},
"completed": {"$eq": false}
}
},
{
"$unwind": "$items"
},
{
"$group": {
"_id": {
"product_id": "$items.product_id",
"name": "$items.name",
"variation_id": "$items.variation_id"
},
"count": {
"$sum": 1
}
}
},
{
"$sort": {
"count": -1
}
}
]
}
RESULTADO DA AGGREGATION
A requisição da aggregation construída acima, produzirá um resultado semelhante ao seguir:
{
"result": [
{
"_id": {
"product_id": "p00000000000000000000001",
"name": "Vaso para orquídeas / M",
"variation_id": "vp0000000000000000000001"
},
"count": 21
},
{
"_id": {
"product_id": "p00000000000000000000010",
"name": "Boleira Vermelha"
},
"count": 15
},
{
"_id": {
"product_id": "p00000000000000000000007",
"name": "Bandeja Frizada Preta G"
},
"count": 4
},
{
"_id": {
"product_id": "p00000000000000000000005",
"name": "Cocô de Cerâmica"
},
"count": 3
},
{
"_id": {
"product_id": "p00000000000000000000002",
"name": "Tesoura para Poda / Verde limão / M",
"variation_id": "vp00000000000000000000015"
},
"count": 3
},
{
"_id": {
"product_id": "p00000000000000000000002",
"name": "Tesoura para Poda / Prata / M",
"variation_id": "vp0000000000000000000016"
},
"count": 1
},
{
"_id": {
"product_id": "p00000000000000000000002",
"name": "Tesoura para Poda / Verde limão / G",
"variation_id": "vp0000000000000000000009"
},
"count": 1
}
]
}
Percebemos que o result é uma lista no qual contém um _id contendo o product_id, name, variation_id (caso exista), sendo respectivamente, o id do produto , nome do produto e id da variação caso o produto contenha uma variação; além do _id, a lista possui um count que corresponde a quantidade de vezes que esse produto for abandonado em um carrinho.
Show, essa foi mais uma aggregation, esperamos que esse exemplo possa contribuir ainda mais para vocês.
E até breve.