2016-08-25 7 views
0
"payments": [ 
      { 
      "_id": "57bea755acfbfc4e37c3dfdf", 
      "user": "57b1c3d2d591a46848c25f45", 
      "transferred_amount": 10, 
      "transaction_type": "refund", 
      "reason": "#1968 shop box refunded", 
      "__v": 0 
      }, 
      { 
      "_id": "57beb883acfbfc4e37c3dfe0", 
      "user": "57b1c3d2d591a46848c25f45", 
      "transferred_amount": 10, 
      "transaction_type": "payout", 
      "reason": "#1968 shop box refunded", 
      "__v": 0 
      } 
     ] 

これは私のdbデータです。

Model.aggragate().project({ 
      paid_out_amount: { 
      $sum: { 
       $cond: [{ 
        $eq: ['$payments.transaction_type', 'payout'] 
       }, 0, '$payments.transferred_amount'] 
      } 
     } 
}) 

これはこれらのデータを取得するためのノードコードです。私は合計額払い出し金額だけを試して、それをフィールドに保管しています。 $ condは常にゼロを返します。誰も私を助けることができます。

答えて

0

オペレーター$unwindを試すことができます。

同様:

Model.aggregate([ 
{ $unwind: "$payments" }, 
{ 
    $group: 
     { 
      _id: null, 
      paid_out_amount: { $sum: {$cond: [ { $eq: [ "$payments.transaction_type", 'payout' ] }, '$payments.transferred_amount', 0 ] } } 
     } 
} 
]); 

私はあなたがpayoutタイプのすべてのtransferred_amountを追加し、_id:nullを使用する理由の総合計を返すようにしたいと仮定します。必要に応じてグループのフィールド名を追加することができます。