MongoDB $乘法运算符PHP示例?

时间:2013-09-04 10:27:26

标签: php mongodb

我正在尝试多个所有“点”字段。

$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/,但没有详细的解释或示例。

你帮我吗?

2 个答案:

答案 0 :(得分:1)

它在页面上说它是如何工作的:

  

获取一个或多个数字的数组并将它们相乘,然后返回结果产品。

所以你这样做:

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

因为你不能有意义地多个数字。

答案 1 :(得分:1)

$multiply不支持$group operator(与$sum不同),因此您无法在该上下文中使用它来计算分组字段的值。相反,$multiply可以在表达式中使用,表达式本身可以作为参数包含在$group运算符中,也可以作为投影中的字段值。

我尝试按如下方式重写您的管道:

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

这里的想法是我们使用$push将所有点值收集到每个状态的$group投影的数组中,然后计算产品,使用该数组作为{{的参数1}}。

不幸的是,这导致了一个错误,因为MongoDB将取消引用的$multiply字段视为要加倍的单个参数,而不是数字数组。这最近被报道为SERVER-10676中的错误。我鼓励你观看这个问题以便解决。

此外,我打开SERVER-10682讨论为points添加$product运算符,这对您的用例非常理想。