MongoDB PHP 根据条件聚合数据
MongoDB PHP Aggregating data with condition
我有 2 个不同的管道:有条件
$pipeline = array(
array('$match' => array(
'currentStep' => 'CREATE')),
array('$group' => array(
'_id' => '$name',
'value' => array('$sum' => 1)
)));
无
$pipeline = array(
array('$group' => array(
'_id' => '$name',
'value' => array('$sum' => 1)
)));
如何将它们合并到一个 $pipeline 中以获得这样的输出:
_id - value_with_match_condition - value_without
为此,您需要结合使用 $sum
和 $cond
。例如,它可能看起来像这样:
$pipeline = array(
array('$group'=>array(
'_id'=>'$name',
'sum_matching'=>array(
'$sum'=>array('$cond'=>array(
'if'=>array('$eq'=>array('$currentStep', 'CREATE')),
'then'=>1,
'else'=>0
)),
),
'sum_all'=>array('$sum'=>1)
))
);
这是未经测试的,但符合这种一般形式的东西应该可以工作。
我有 2 个不同的管道:有条件
$pipeline = array(
array('$match' => array(
'currentStep' => 'CREATE')),
array('$group' => array(
'_id' => '$name',
'value' => array('$sum' => 1)
)));
无
$pipeline = array(
array('$group' => array(
'_id' => '$name',
'value' => array('$sum' => 1)
)));
如何将它们合并到一个 $pipeline 中以获得这样的输出:
_id - value_with_match_condition - value_without
为此,您需要结合使用 $sum
和 $cond
。例如,它可能看起来像这样:
$pipeline = array(
array('$group'=>array(
'_id'=>'$name',
'sum_matching'=>array(
'$sum'=>array('$cond'=>array(
'if'=>array('$eq'=>array('$currentStep', 'CREATE')),
'then'=>1,
'else'=>0
)),
),
'sum_all'=>array('$sum'=>1)
))
);
这是未经测试的,但符合这种一般形式的东西应该可以工作。