Alternativas ao $expr para o MongoDB 3.4.4

Olá pessoal, alguém conhece alguma alternativa para fazer isso no MongoDB 3.4.4

Código que estou tentando fazer porem não funciona no MongoDB 3.4.4:

await model('UsoApi').find({
    $and: [{
      $or: [
        { userIdDaChave: body.userIdDaChave },
        { chaveUsada: body.chaveUsada }
      ]
    },
    {
      "$expr": {
        "$and": [
          { "$eq": [{ "$year": "$createdAt" }, mesAno[1]] },
          { "$eq": [{ "$month": "$createdAt" }, mesAno[0]] }
        ]
      }
    }]
  }).sort({ createdAt: 'desc' });

Boa tarde, @JotinhaBR

Opa, vou tentar te ajudar nisso, meu amigo :wink:

Pelo que entendi você criou uma função assíncrona de busca nos documentos do seu banco MongoDB.

Sendo assim, o único erro da sua query parece ser mesmo apenas o seletor $expr que você utilizou nessa busca. De acordo com a documentação, o $expr é um seletor do MongoDB que permite a busca com agregação de valores na sua base de dados.

A agregação basicamente agrupa os dados de vários documentos do seu banco e opera de várias maneiras para retornar um resultado combinado. Dito isso, na versão 3.4.4 do MongoDB são aceitas três tipos de executar agregação: Os métodos de agregação de finalidade única, a função de map reduce e o pipeline de agregação.

  • Métodos de agregação de finalidade única: Todas essas operações agregam documentos de uma única coleção. Ou seja, embora essas operações ofereçam acessos simples a processos de agregação comuns, elas têm pouca flexibilidade.

  • Map-Reduce: Como outras operações de agregação, o map-reduce também pode especificar uma condição de consulta para selecionar os documentos de entrada, bem como classificar e limitar mais de um resultado. Esse processo usa funções JavaScript personalizadas para executar o mapeamento e reduzir as operações, bem como a operação de finalização opcional.

  • Pipeline de agregação
    Por fim, o pipeline de agregação é a terceira forma de agregar os dados que o Mongo DB oferece. Ele é uma estrutura para agregação de dados modelada no conceito de pipelines de processamento de dados. Os documentos entram em um pipeline de vários estágios, que transforma os documentos em resultados agregados.

Para mais informações sobre esses métodos e se aprofundar mais recomendo dar uma lida nesse ótimo artigo aqui: Mongo Aggregation. O poder da transformação dos dados no… | by Rosa Bugan | Concrete | Medium

Dito isso tudo, acredito que o Map-Reduce seja o método que está procurando visto que deseja retornar mais de um valor na sua query. No caso, para executar sem erros acredito que deve primeiramente retirar o $expr da sua query e montar sua query de acordo com o que está nesses exemplos aqui:

Map-Reduce Examples — MongoDB Manual

Fico a disposição, meu querido, avise aqui se tem algum progresso, por favor :wink:

1 Curtida