PHP mongoDB агрегация - примеры

Общий стиль (не 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...