2016-11-21 51 views
1

我有發票收集...如何得到這個結果與骨料MongoDB中

{ 
"_id" : 1, 
"items" : [ 
    { 
     "_id" : 1, 
     "value" : 100, 
     "price" : 9500 
    }, 
    { 
     "_id" : 2, 
     "value" : 200, 
     "price" : 9500 
    } 
], 
"costs" : [ 
    { 
     "_id" : 1, 
     "price" : 100 
    }, 
    { 
     "_id" : 2, 
     "price" : 150 
    }, 
    { 
     "_id" : 3, 
     "price" : 250 
    } 
]} 

我得到總金額的發票......

換句話說=>

{ $ sum:{$ multiply:{[$ items.value,$ items.price]}}} - {$ sum:「$ costs.price」};

{ 
    "_id" : 1, 
    "amount" : 2849500 
} 

非常想......

;-)

+0

你的問題是什麼? – styvane

回答

3

蒙戈3.4版本

$地圖乘以項目的價格&價值$減少計算項目的總和價格&價值和$減少來計算成本的價格的總和。 $從較早的減少值中減去以獲得最終的金額。

aggregate([{ 
    $project: { 
     _id: 1, 
     amount: { 
      $subtract: [{ 
       $reduce: { 
        input: { 
         $map: { 
          input: "$items", 
          as: "item", 
          in: { 
           $multiply: ["$$item.value", "$$item.price"] 
          } 
         } 
        }, 
        initialValue: 0, 
        in: { 
         $add: ["$$value", "$$this"] 
        } 
       } 
      }, { 
       $reduce: { 
        input: "$costs.price", 
        initialValue: 0, 
        in: { 
         $add: ["$$value", "$$this"] 
        } 
       } 
      }] 
     } 

    } 
}]) 

蒙戈3.x版

首先$項目繁殖項目的價值&價格。下一個分組計算兩個項目和成本字段的總和,這將導致每個項目和成本字段的一個數組值,並且最終項目僅查看兩個數組中的數組值,使用$ arrayElemAt來減去彼此的值。

aggregate(
    [{ 
     $project: { 
      vpItems: { 
       $map: { 
        input: "$items", 
        as: "item", 
        in: { 
         $multiply: ["$$item.value", "$$item.price"] 
        } 
       } 
      }, 
      costs: '$costs' 
     } 
    }, { 
     $group: { 
      _id: '$_id', 
      vpItems: { 
       $addToSet: { 
        $sum: '$vpItems' 
       } 
      }, 
      pCosts: { 
       $addToSet: { 
        $sum: '$costs.price' 
       } 
      } 
     } 
    }, { 
     $project: { 
      _id: 1, 
      amount: { 
       $subtract: [{ 
        $arrayElemAt: ["$vpItems", 0] 
       }, { 
        $arrayElemAt: ["$pCosts", 0] 
       }] 
      } 
     } 
    }]) 

蒙戈2.6版本

$放鬆項目和組calcualte從多項目的價格&值的返回值的總和和$放鬆的成本來計算項目的價格&價值和項目的總和$從以前的分組中減去值以計算最終金額。

aggregate([{ 
     $unwind: '$items' 
    }, { 
     $group: { 
      _id: '$_id', 
      totalItems: { 
       $sum: { 
        $multiply: ["$items.value", "$items.price"] 
       } 
      }, 
      costs: { 
       $first: '$costs' 
      } 
     } 
    }, { 
     $unwind: '$costs' 
    }, { 
     $group: { 
      _id: '$_id', 
      totalItems: { 
       $first: '$totalItems' 
      }, 
      totalPrice: { 
       $sum: '$costs.price' 
      } 
     } 
    }, { 
     $project: { 
      _id: 1, 
      amount: { 
       $subtract: ['$totalItems', '$totalPrice'] 
      } 
     } 
    }]) 
+0

感謝我的朋友。但這個錯誤$ sum:「errmsg」:「異常:無效的運算符$ sum'」, 「code」:15999 –

+0

我在3.2上運行它。你使用的是什麼版本的mongodb? – Veeram

+0

MongoDB版本:2.6.10 –