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

你能帮帮我吗?

4

2 回答 2

1

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

接受一个或多个数字的数组并将它们相乘,返回结果乘积。

所以你也是:

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

因为你不能有意义地乘以一个数字。

于 2013-09-04T11:08:41.333 回答
1

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

我试图重写你的管道如下:

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

这里的想法是,我们将使用$push将所有点值收集到每个状态$group投影的数组中,然后使用该数组作为$multiply.

不幸的是,这导致了错误,因为 MongoDB 将取消引用的points字段视为要相乘的单个参数,而不是数字数组。这最近被报告为SERVER-10676中的错误。我鼓励您关注该问题以寻求解决方案。

此外,我打开了SERVER-10682讨论添加一个$product运算符 for $group,这将是您的用例的理想选择。

于 2013-09-04T19:40:41.447 回答