MongoDB PHP Агрегирование данных с условием - PullRequest
0 голосов
/ 06 сентября 2018

У меня 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)
            )));

Как объединить их в один $ конвейер, чтобы получить такой вывод:

_id - value_with_match_condition - value_without

1 Ответ

0 голосов
/ 06 сентября 2018

Для этого вам нужно объединить использование $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)
    ))
);

Это не проверено, но что-то, соответствующее этой общей форме, должно работать.

...