2016-09-14 51 views
0

我試圖計算的累積回報MongoDB中的股票組合,並最好將能夠使用累積$產品累加器

例如如果我有三個文件,其中一個值爲0.5,下一個爲0.6,最後一個爲0.7

我可以使用聚合累加器$sum輕鬆計算總和。這將給0.5 + 0.6 + 0.7

我想什麼做的是計算累計產品這些值即0.5 * 0.6 * 0.5的($產品)?這可以直接做我必須使用日誌嗎?

文檔結構是類似如下

{ 
    "date" : 2015-12-31T15:50:00.000Z, 
    "time" : 1550, 
    "aum" : 1000000, 
    "basket" :[ 
    { 
    "_id" : "Microsoft", 
    "return" : 0.03, 
    "shares" : 10, 
    "price" : 56.53, 
    "fx"  : 1.0 
    }, 
    . 
    . 
    . 
    { 
    "_id" : "GOOG.N", 
    "return" : 0.05, 
    "shares" : 20, 
    "price" : 759.69, 
    "fx"  : 1.0 
    } 
+0

我在說的文件是嵌入式文件「籃子」。我想在「返回」字段上形成累積產品 –

+0

不幸的是,https://jira.mongodb.org/browse/SERVER-10681妨礙了這一點。 – JohnnyHK

+0

我最終改變了數學使用總和。由於我在計算中有回報,因此我可以使用身份日誌(ABC)= log(A)+ log(b)+ log(c) –

回答

2

可以使用$multiply (aggregation)

> db.stocks.aggregate({$project: { total: { $multiply: [ 0.5,0.6,0.5 ] } }}) 

UPDATE:

這將計算出每隻股票的產品在一個單獨的文件:

> var total=1;db.stocks.find().forEach(function(doc){total=total*doc.stock;}) 
> total 
+0

我不確定這會起作用,因爲每隻股票的回報都在單獨文件。我需要能夠通過一套文件 –

+0

okais產生一個累積產品......但我沒有得到你......你告訴你可以使用累計累加器$ sum輕鬆計算總和......你能展示它?所以我可以更簡短地理解你的問題。 –

-3

需要使用$乘法和下面是一個簡單的查詢

db.stocks.aggregate([{總:{$乘法:[ 「$價格」, 「$量」]}}])