我正在尝试多个所有“点”字段。
$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/,但没有详细的解释或示例。
你帮我吗?答案 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
运算符,这对您的用例非常理想。