получить сумму в нескольких условиях в mongodb и php

0

У меня есть следующий код, чтобы получить некоторые из всех цен, которые имеют тип 1 или конкретное значение, но он не работает.

<?php
$m = new Mongo(); 
if (!$m)echo "Not Connected to database successfully";
$db =$m->mongo_project;
$collection = $db->prices;
$pipeline=array(
    array(
        '$match' => array(
            '_id' => array(
                '$type' =>1
            )
         )
    ),
    array(
        '$group' => array(
             '_id' => '',
             'count' => array(
                 '$sum' => '$price' 
             )
         )
    ),  
);
$out = $collection->aggregate($pipeline);
foreach ($out as $key=>$value) {
    if($key=='result') {
        $r=$value[0]['count'];
    }
}
echo $r;?>
  • 0
    Вы можете добавить один или несколько примеров документов, упомянутое вами «конкретное значение» и ожидаемый результат, чтобы получить полезные ответы.
Теги:
mongodb-query
aggregation-framework

1 ответ

0

Я думаю, что вы имеете в виду документ с полем "тип" со значением 1. Оператор $type используемый здесь, является специальным оператором MongoDB, используемым для соответствия определенным типам BSON. В этом случае вы запрашивали соответствующие поля _id которые были типа "DOUBLE", или BSON type 1.

Исправление:

$pipeline=array(
    array(
        '$match' => array(
            'type' => 1
         )
    ),
    array(
        '$group' => array(
             '_id' => '',
             'total' => array(
                 '$sum' => '$price' 
             )
         )
    ),  
);

Или вы можете просто получить "сумму" значений "цена" за каждое значение "тип", передав это вместо _id в вашей операции с $group. Таким образом, вы можете сразу увидеть все:

$pipeline=array(
    array(
        '$group' => array(
             '_id' => '$type',
             'total' => array(
                 '$sum' => '$price' 
             )
         )
    ),  
);

В этом контексте "$ type" означает значение поля.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню