當您執行查詢時,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);
?>
現在,假設你是將集合中的所有文檔分組,然後指定_id
值null
以計算所有輸入文檔整體的累計值。由此產生的陣列將有一個元素,您可以通過它的索引訪問:
<?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);
?>
謝謝。我使用這個代碼:var_dump($ data ['result']); $ massi = array_values($ data ['result'])[0] - > massi; var_dump($ massi);第一個var_dump是可以的,但第二個var_dump返回NULL – bomberdini
您是否將該集合中的所有文檔分組? – chridam
是我將所有文檔分組 – bomberdini