title: MongoDB Aggregation - Sum value of nested arrays
body: <p>I'm trying to get the sum of a specific field that's inside an array. The problem is, that array is also inside another array. My documents are as follow (simplified):</p>
  
  <pre><code>{
      "nome": "test-1"
      "notas": [{
          "numero_fiscal": "0001",
          "valores": {
              "portal": 1000,
              "arquivo": 1000
          },
          "abatimentos": [{
              "valor": 250,
              "tipo": "TIPO 1"
          }, {
              "valor": 250,
              "tipo": "TIPO 2"
          }]
      }, {
          "numero_fiscal": "0002",
          "valores": {
              "portal": 2000,
              "arquivo": 2000
          },
          "abatimentos": [{
              "valor": 500,
              "tipo": "TIPO 1"
          }, {
              "valor": 500,
              "tipo": "TIPO 2"
          }]
      }]
  }
  </code></pre>
  
  <p>I want my output to be something like:</p>
  
  <pre><code>{
      "_id": "resumo",
      "total_notas": 2, // this is the counter for the array "notas"
      "soma_portal": 3000, // this is the sum of the "valores.portal" of all "notas"
      "soma_arquivo": 3000, // this is the sum of the "valores.arquivo" of all "notas"
      "soma_abatimento": 1500 // this is the sum of all the "abatimentos.valor" from all the "notas"
  }
  </code></pre>
  
  <p>I have tried the following aggregation (amongst others, but the result is always the same):</p>
  
  <pre><code>Notas.aggregate()
  .match(my_query)
  .unwind('notas') // unwinding 'notas' array
  .group({
      '_id': 'resumo',
      'total_notas': { '$sum': 1 },
      'abatimentos': { '$push': '$notas.abatimentos' },
      'soma_portal': { '$sum': { '$notas.valores.portal' } },
      'soma_arquivo': { '$sum': { '$notas.valores.arquivo' } }
  })
  .unwind('$abatimentos')
  .group({
      '_id': '$_id',
      'total_notas': { '$first': '$total_notas' },
      'soma_portal': { '$first': '$soma_portal' },
      'soma_arquivo': { '$first': '$soma_arquivo' },
      'soma_abatimento': { '$sum': '$abatimentos.valor' }
  })
  </code></pre>
  
  <p>This gives me almost everything i want correctly, but the 'soma_abatimento' is always 0, instead of 1500</p>
  
  <p>Am i on the right path? Or is this something that should not be done on the database query?</p>