Aggregation, para quantificar campanhas por pedidos, em um determinado período

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é :coffee: e vamos lá :rocket:

REALIZAR A AGGREGATION


Como já vimos em outros tópicos, precisamos de algumas informações importantes antes mesmo de realizarmos busca na nossa API :purple_heart:. 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 :purple_heart: 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.

E até a próxima pessoal :person_raising_hand:t5:‍‍:male_sign:.

2 curtidas