2013-09-04 2 views
1

Я пытаюсь несколько полей «точки».

$out = $kuponmac->aggregate(
     array('$match' => array('random'=>$random, 'ekleyen'=>$ekleyen)), 
     array('$group' => array(
        '_id' => '$state', 
        'totalPop' => array('$multiply' => '$point') 
       ) 
      ), 
      array(
       '$match' => array('totalPop' => array('$gte' => 0)) 
      ) 
     ); 

это мой код. Я пытаюсь использовать умножить, но я не мог использовать его правильно. Как я могу умножить все «точечные» поля?

Я ищу http://docs.mongodb.org/manual/reference/aggregation/multiply/, но подробного объяснения или примера нет.

может помочь мне?

ответ

1

Он говорит на странице, как это работает:

принимает массив из одного или нескольких чисел и кратных их, возвращая полученный продукт.

Так вы:

array('$multiply' => array('$point', '$otherNumber')) 

Поскольку вы не можете mulitply один номер по значению.

1

$multiply не поддерживается $group operator (в отличие от $sum), поэтому вы не можете использовать его в этом контексте для вычисления значения для сгруппированного поля. Вместо этого в выражении может использоваться $multiply, который сам может быть включен как аргумент оператору $group или в качестве значения поля в проекции.

Я попытался переписать трубопровод следующим образом:

[ 
    { $group: { _id: "$state", points: { $push: "$point" }}}, 
    { $project: { product: { $multiply: "$points" }}} 
] 

Идея заключается в том, что мы будем использовать $push собрать все значения точек в массив для $group проекции каждого государства, а затем вычислить продукт, используя этот массив в качестве аргумента $multiply.

К сожалению, это привело к ошибке, так как MongoDB обработал полеde-referenced в качестве единственного аргумента для умножения вместо массива чисел. Об этом недавно сообщалось как ошибка в SERVER-10676. Я бы посоветовал вам следить за этой проблемой для разрешения.

Кроме того, я открыл SERVER-10682, чтобы обсудить вопрос о добавлении оператора $product для $group, который идеально подходит для вашего прецедента.

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