При выполнении запроса, возвращаемое значение метода aggregate()
помощник массив с двумя элементами: ok
со значением double(1)
, а также элемент результата, содержащий массив всех документов, которые прошли через весь конвейер.
Например, если вы хотите, чтобы сгруппировать все документы по полю 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),
),
…
Примечание: Поскольку структура агрегации возвращает все свои результаты в виде одного документа по сети, полный результат ограничен 16 МБ. Внутренние границы памяти также ограничены, поэтому всегда разумно ограничивать данные, поступающие через конвейер, оператором, как только сможете.
Таким образом, ваш запрос, вы в основном хотели бы, чтобы отобразить все 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 return NULL – bomberdini
Собираете ли вы все документы в коллекции? – chridam
Да, я группирую все документы – bomberdini