PHP mongoDB агрегация - примеры
Primary tabs
Общий стиль (не php) - документация
Прежде всего, читаем или хотя бы ознакамливаемся с оф. документацией ,собственно, начинающим следует начать с этого раздела ,но может быть в каком-то смысле небеспочвенен и прямой переход к примерам.
PHP примеры
Предположим, что у нас есть компонент, позволяющий логгировать (журналировать) системные сообщения с использованием MongoDB.
Для каждого записываемого сообщения можно определять его уровень - некое целое число, то есть при записи мы указываем что-то вроде:
public function trace($message) // функция для записи одиночного сообщения { $record = array( 'type' => 'trace', 'level' => 1, 'message' => $message ); $this->writeRecord($record); } public function mongoLog($message) // функция для записи одиночного сообщения { $record = array( 'type' => 'MongoLog', 'level' => 0, 'message' => $message ); $this->writeRecord($record); }
Тогда извлечь массив с данными о числе сообщений каждого уровня + сумме значений уровней для каждой группы (она, естественно, будет равна числу сообщений данного уровня, умноженному на значение уровня) можно получить используя во такой вот агрегирующий запрос:
$cursor = $collection->aggregate(array( array( '$group' => array( "_id" => '$level', // группируем по значению уровня 'total' => array( '$sum' => '$level'), // считаем сумму значений уровней для каждой группы 'count' => array('$sum' => 1), // считаем число сообщений в каждой группе )) ) ); var_dump ($cursor);
заметьте что $sum с указанием конкретного значения, напр=
'$sum' => 1
позволяет наращивать счётчик именно на это значение)
Другие примеры агрегации на PHP
для версии 1.3.0 = http://php.net/manual/ru/mongocollection...
агрегация через ->command() = http://stackoverflow.com/questions/11290...
- Log in to post comments
- 7062 reads