Mongo Distinct Aggegation

Я пытаюсь использовать структуру агрегации для выполнения подсчета групп в монго, но результаты не так точно ожидаются.

Рассмотрим сборник

$people->insert(array("user_id" => "1", "day" => "Monday", 'age' => 18)); $people->insert(array("user_id" => "3", "day" => "Monday", 'age' => 24)); $people->insert(array("user_id" => "1", "day" => "Monday", 'age' => 18)); $people->insert(array("user_id" => "1", "day" => "Monday", 'age' => 18)); $people->insert(array("user_id" => "2", "day" => "Monday", 'age' => 25)); $people->insert(array("user_id" => "4", "day" => "Monday", 'age' => 33)); $people->insert(array("user_id" => "1", "day" => "Tuesday", 'age' => 18)); $people->insert(array("user_id" => "2", "day" => "Tuesday", 'age' => 25)); $people->insert(array("user_id" => "1", "day" => "Wednesday", 'age' => 18)); $people->insert(array("user_id" => "2", "day" => "Thursday", 'age' => 25)); $people->insert(array("user_id" => "1", "day" => "Friday", 'age' => 18)); 

Я использую запрос ниже, попробуйте подсчитать количество различных записей (user_id) за каждый день недели.

 $query = array( array( '$project' => array( 'user_id' =>1, 'day' =>1, ), ), array( '$group' => array( '_id' => array( 'user_id' => '$user_id', 'day' => '$day'), 'count' => array('$sum' => 1), ) )); 

Поэтому для коллекции выше результаты должны быть

 Monday = 3 Tues = 2, Wed = 1, Thur = 1 and Friday = 1 

но он не группирует итоговые значения всех пользователей DISTINCT users_id в течение дня, а вместо этого на каждый день он дает мне общее количество для каждого существующего user_id.`

Результаты (не завершены)

  [result] => Array ( [0] => Array ( [_id] => Array ( [user_id] => 1 [day] => Friday ) [count] => 1 ) [1] => Array ( [_id] => Array ( [user_id] => 1 [day] => Wednesday ) [count] => 1 ) [2] => Array ( [_id] => Array ( [user_id] => 2 [day] => Tuesday ) [count] => 1 ) ... ... ... 

Может ли кто-нибудь помочь мне фильтровать ежедневные итоговые данные, чтобы он включал только отдельные суммы в день

Я посмотрел на $ unwind, но не мог по-настоящему окунуться в него. `

Solutions Collecting From Web of "Mongo Distinct Aggegation"

Если я правильно понимаю вопрос, что вы пытаетесь понять,

  totals of all DISTINCT users_id under a day 

Или, насколько я понимаю: количество уникальных user_ids в день.

Для этого вы можете взять группу, которую у вас уже есть, и вырезать счетчик, чтобы у вас было уникальное значение _id.user_id и _id.day :

 '$group' => array( '_id' => array( 'user_id' => '$user_id', 'day' => '$day' ) ) 

Затем передайте это в другое выражение $group которое подсчитывает количество документов в день, поскольку для каждой уникальной user_id / day имеется ровно одна:

 '$group' => array( '_id' => '$_id.day', 'count' => array('$sum' => 1) )