Агрегация mongodb в php

Я использую mongodb 2.1 и как перевести этот запрос в php

db.counter.aggregate([ 
 { $match:{ page_id:123456 }}, 
 { $group:{_id:"$page_id",total:{$sum:"$pageview"}} } 
 ]);

Спасибо


person user1457750    schedule 02.07.2012    source источник


Ответы (2)


Вы можете использовать метод 'command()' в PHP, чтобы запустить структуру агрегации как команду базы данных. Точный синтаксис для вашего примера запроса будет таким:

   $conn = new Mongo("localhost:$port");
   $db = $conn->test;

   $result = $db->command (
            array( 
                "aggregate" => "counter",
                "pipeline" => 
                    array( 
                        array( '$match' => array( 'page_id' => 123456 )),
                        array( '$group' => array( "_id" => '$page_id',
                                    'total' => array( '$sum' => '$pageview')  
                                )
                            )
                    )
            )
        );
person William Z    schedule 03.07.2012
comment
В драйвер 1.3.0 mongo добавлен помощник aggregate(). Базовый синтаксис command() тоже работает :). - person Stennie; 23.09.2012
comment
Я также пробовал это для моего запроса. Но он возвращает ошибку, в которой говорится об исключении: неправильный тип для поля (агрегата) 3! = 2 - person Happy Coder; 15.11.2013
comment
@Alwin: это означает, что у вас синтаксическая ошибка. Невозможно узнать, что это такое, не видя вашего кода. - person William Z; 15.11.2013

Пытаться:

$m = new MongoClient();
$con = $m->selectDB("dbName")->selectCollection("counter");
$cond = array(
    array('$match' => array('page_id' =>123456)),
    array(
        '$group' => array(
            '_id' => '$page_id',
           'total' => array('$sum' => '$pageview'),
        ),
    )
);
$out = $con->aggregate($cond);
print_r($out);

Подробнее нажмите здесь

person Indrajeet Singh    schedule 11.04.2017