2013-08-04 6 views
1

Мне нужно вычислить мощность числа (например, pow(3, 6)) в моем конвейере агрегационной структуры.Вычисление мощности числа в агрегировании-структуре MongoDB

Однако, похоже, MongoDB не предоставляет оператора $ pow math в структуре агрегации. Я удивлен, что это не предусмотрено в доступных математических операторах.

Есть ли у кого-нибудь предложения относительно обходного пути? Или я пропустил что-то в документации, которая позволила бы мне это сделать?

+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().

Я не видел другого решения, кроме как выполнить агрегацию с помощью функций map/reduce, и в этом случае я мог бы использовать Math.pow() и Math.cos() Javascript.

0

В 3,2 Монго вы будете иметь родную $pow операции для структуры агрегации со следующим синтаксисом: { $pow: [ <number>, <exponent> ] }.

Вот пример со страницы Монго: db.datasets.aggregate([ { $project: { raisedTo2: { $pow: [ 5, 2 ] } } } ])

Смежные вопросы