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
- 7597 reads