2016-03-07 42 views
1

的結果,我有這樣的代碼:使用聚合的MongoDB在PHP

$data = $collection->aggregate(
    array( 
     '$group'=> array(
      '_id' => $fn, 
      'massi' => array(
       '$max' => $dnameth_value 
      ) 
     ) 
    ) 
); 

我執行這個查詢,我想只獲得最大的價值,並在變量使用。


我試過這段代碼:

$data=$collection->aggregate(array('$group'=> array('_id'=>$fn,'massi'=>array('$max'=>$dnameth_value)))); 

var_dump($data['result']); 

$func = function($value) { 
return $value->massi;}; 


$massi = array_map($func, $data['result']); 

var_dump($massi); 

輸出的圖像中附上

enter image description here

回答

0

當您執行查詢時,aggregate() helper方法的返回值是具有兩個元素的數組:ok,值爲double(1)以及一個result元素,其中包含所有通過整個管道的文檔的數組。

舉例來說,如果你想組由現場my_key所有的文件和你想獲得該組的最大dnameth_value,並執行該聚合操作

<?php 
$m = new MongoClient; 
$collection = $m->test->collection; 
$fn = '$my_key'; 
$dnameth_value = '$dnameth_value' 
$data = $collection->aggregate(
    array( 
     '$group'=> array(
      '_id' => $fn, 
      'massi' => array(
       '$max' => $dnameth_value 
      ) 
     ) 
    ) 
); 

var_dump($data['result']); 
?> 

你應該期望的結果數組從$data['result']進來以下形式(例如):

… 
array (
    '_id' => 'value', 
    'massi' => double(13), 
), 
array (
    '_id' => 'other_value', 
    'massi' => double(9), 
), 
array (
    '_id' => 'another_value', 
    'massi' => double(4), 
), 
… 

注意:由於聚合框架將其所有結果作爲一個文檔通過網絡返回,因此完整結果僅限於16MB。內部也有內存限制,因此儘可能快地限制通過管道傳輸的數據是明智的。


所以,你的要求,你基本上會想一切從數組中massi值映射到使用另一個數組變量array_map()

<?php 
$m = new MongoClient; 
$collection = $m->test->collection; 
$fn = '$my_key'; 
$dnameth_value = '$dnameth_value' 
$data = $collection->aggregate(
    array( 
     '$group'=> array(
      '_id' => $fn, 
      'massi' => array(
       '$max' => $dnameth_value 
      ) 
     ) 
    ) 
); 

var_dump($data['result']); 

$func = function($value) { 
    return $value['massi']; 
}; 

$massi = array_map($func, $data['result']); 
var_dump($massi); 
?> 

現在,假設你是將集合中的所有文檔分組,然後指定_idnull以計算所有輸入文檔整體的累計值。由此產生的陣列將有一個元素,您可以通過它的索引訪問:

<?php 
$m = new MongoClient; 
$collection = $m->test->collection; 
$fn = 'null'; 
$dnameth_value = '$dnameth_value' 
$data = $collection->aggregate(
    array( 
     '$group'=> array(
      '_id' => $fn, 
      'massi' => array(
       '$max' => $dnameth_value 
      ) 
     ) 
    ) 
); 

var_dump($data['result']); 

$massi = $data['result'][0]['massi']; 
var_dump($massi); 
?> 
+0

謝謝。我使用這個代碼:var_dump($ data ['result']); $ massi = array_values($ data ['result'])[0] - > massi; var_dump($ massi);第一個var_dump是可以的,但第二個var_dump返回NULL – bomberdini

+0

您是否將該集合中的所有文檔分組? – chridam

+0

是我將所有文檔分組 – bomberdini