2017-11-13 3 views
0

クエリは二重の値を返しています、これで私を助けることができますか? 問題は緩和されていますか?私はこのクエリで助けが必要ですmongodb with nodejs

は...集計と

デシベルの借方と貸方を統合相談です...

コード:

マイDAO(MongoDBは+ NodeJS):

ListarDebitosDAO.prototype.consolidado = function(usuario,res,req){ 

this._connection.open(function(err, mongoclient){ 
    mongoclient.collection("contas", function(err, collection){ 
     collection.aggregate([{ 
      $match : {usuario : usuario}},{ 
      $unwind: "$debitos" 
     },{ 
      $unwind: "$creditos" 
     }, { 
      $group: { 
       "_id" : usuario, 
       "debitos": { 
        $sum: "$debitos.debito" 
       }, 
       "creditos" : { 
        $sum: "$creditos.credito" 
       } 

      } 
     }]) 
     .toArray(function(error, results){ 

      console.log(results) 

      var debitoConsolidado = results[0].debitos; 
      var creditoConsolidado = results[0].creditos; 



      res.render('dashboard', {debitoConsolidado,nome_usuario: req.session.nome,creditoConsolidado}) 

     }); 
     // mongoclient.close(); 
    }); 
}); 

}

私のコレクション(exemple):

{ 
"_id" : ObjectId("5a09113b42e54fb49230fa37"), 
"usuario" : "sara", 
"creditos" : [ 
    { 
     "nome_do_credito" : "credito inicial", 
     "credito" : 0 
    }, 
    { 
     "nome_do_credito" : "salario", 
     "credito" : 1200 
    } 
], 
"debitos" : [ 
    { 
     "nome_do_debito" : "debito inicial", 
     "debito" : 0 
    }, 
    { 
     "nome_do_debito" : "Vivo", 
     "debito" : 200 
    }, 
    { 
     "nome_do_debito" : "Vivo", 
     "debito" : 600 
    } 
] 

}

マイatual出力:

{ "_id" : null, "debitos" : 1600, "creditos" : 3600 } 

私が必要:

{ "_id" : null, "debitos" : 800, "creditos" : 1200 } 
enter code here 

答えて

0

問題はあなたが両方を使用しようとしているということです同時に巻き戻すと、重複したエントリが作成され、クレジットとデビットの合計が間違っています。私はあなたが何ができるかを推測

は、私はこのまたは一部のいずれかの変異体は、あなたのために働く必要があります確信しているシーケンシャル巻き戻しを行うと、クレジットカードやデビット

collection.aggregate([{ 
     $match : {usuario : usuario}},{ 
     $unwind: "$debitos" 
    }, { 
     $group: { 
      "_id" : usuario, 
      "debitos": { 
       $sum: "$debitos.debito" 
      }, 
      "creditos" : "$creditos" 
     } 
    }, 
    { 
     $unwind: "$creditos" 
    }, 
    { 
     $group: { 
      "_id" : usuario, 
      "creditos" : { 
       $sum: "$creditos.credito" 
      } 
      "debitos": "$debitos" 
     } 
    } 
]) 

両方のグループ化です。

0

それは、このような単純なことができます:

db.contas.aggregate([ 
    { 
     $project: { 
     _id: 1, 
     usario: 1, 
     debitos: { 
      $reduce: { 
      input: "$debitos", 
      initialValue: 0, 
      in: { $add: [ "$$value", "$$this.debito" ] } 
      } 
     }, 
     creditos: { 
      $reduce: { 
      input: "$creditos", 
      initialValue: 0, 
      in: { $add: [ "$$value", "$$this.credito" ] } 
      } 
     } 
     } 
    } 
    ]); 

あなたはただ一つの突起を使用するとそのメンバーを合計することにより、配列を減らすことができます。

関連する問題