2013-08-04 113 views
1

我需要在我的聚合框架管道中計算一個數字的功率(如pow(3, 6))。在MongoDB的聚合框架中計算數字的功率

但是,似乎MongoDB沒有在聚合框架中提供$ pow數學運算符。我很驚訝,這在現有的數學運算符中沒有提供。

有沒有人對解決方法有任何建議?或者我在文檔中遺漏了一些可以讓我這樣做的東西?

+0

3.2版本將具有它[本地](http://stackoverflow.com/a/33603017/1090562) –

回答

3

好,而不是pow(3, 6),你當然可以這樣做:

> db.so.insert({ value: 5 }); 
> db.so.aggregate([ 
    { $project: { 
     res: { 
      $multiply: [ '$value', '$value', '$value', '$value', '$value', '$value' ] 
     } 
    } } 
]); 

結果:

{ 
    "result" : [ 
     { 
      "_id" : ObjectId("51ff812723daeb048e4b2f26"), 
      "res" : 15625 
     } 
    ], 
    "ok" : 1 
} 

我無法找到一個JIRA票,所以請在http://jira.mongodb.org/browse/SERVER建議此功能只像這樣一個:https://jira.mongodb.org/browse/SERVER-8568我已經創建了一個補丁,可以通過https://github.com/derickr/mongo/tree/aggregation-framework-new-operators-pow-round-sqrt

+0

良好的建議,但「值的數目「對於基於管道中早期的$項目計算的每條記錄,總是動態的。 –

+0

是的,因此需要一個新的服務器功能,我爲你製作了這個補丁;-) – Derick

+0

聽起來不錯,但是我必須編譯它才能使用該補丁程序,還是有其他一些補丁方法? –

0

我是面臨同樣的問題;實際上我需要pow()和cos()函數。

我沒有看到任何其他的解決方案,但現在我們可以使用Javascript的Math.pow()和Math.cos()來處理map/

0

3.2 Mongo中,對於具有以下語法的聚合框架,您將擁有本機$pow操作:{ $pow: [ <number>, <exponent> ] }

下面是從蒙戈頁面的示例:db.datasets.aggregate([ { $project: { raisedTo2: { $pow: [ 5, 2 ] } } } ])