2012-07-02 3 views
4

Я использую MongoDB 2.1 и как перевести этот запрос в PHPMongoDB агрегации PHP

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

Благодаря

ответ

15

Вы можете использовать 'команду() метод в 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') 
           ) 
          ) 
        ) 
      ) 
     ); 
+0

Благодаря Уильяму, работая отлично. – user1457750

+2

В драйвере 1.3.0 'mongo' добавлен помощник [aggregate()] (http://php.net/manual/en/mongocollection.aggregate.php). Основной синтаксис 'command()' все еще работает :). – Stennie

+0

Я также пробовал сделать это по моему запросу. Но он возвращает ошибку, в которой говорится об исключении: неправильный тип для поля (агрегат) 3! = 2 –

0

Try:

$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); 

Более подробно click here