Вот мой текущий код
$results = Post::whereIn('category_id', $category_ids)
->raw(function($collection) {
return $collection->aggregate([
[
'$group' => [
'_id' => '$user_id',
'count' => [
'$sum' => 1
]
]
],
[
'$sort' => [
'count' => -1
]
],
[
'$limit' => 10
],
]);
});
Я пытаюсь получить сообщения, связанные с определенными категориями, но это $results
возвращает все сообщения.
Как изменить это на where in
+ group by
?
Изменить (2016-07-14 10:13)
Категория
{
"_id": ObjectID("578489618a8920afcb3f4de2"),
"updated_at": ISODate("2016-07-13T06:21:40.700Z"),
"created_at": ISODate("2016-07-12T07:16:49.913Z"),
}
Опубликовать
{
"_id": ObjectID("578499629a89202fcb3f4de3"),
"user_id": "578299629989e02fcb3f4de3",
"title": "How to deal with MongoDB",
"category_id": "578489618a8920afcb3f4de2",
"updated_at": ISODate("2016-07-12T07:16:50.512Z"),
"created_at": ISODate("2016-07-12T07:16:50.512Z")
}
{
"_id": ObjectID("578499629a89202fcb3f4de3"),
"user_id": "578299629989e02fcb3f4de3",
"title": "It's so weird~",
"category_id": "578489618a8920afcb3f4de2",
"updated_at": ISODate("2016-07-12T07:16:50.512Z"),
"created_at": ISODate("2016-07-12T07:16:50.512Z")
}
Итак, 1 категория содержит несколько сообщений, я хочу перечислить, сколько сообщений у каждого пользователя, и отсортировать по убыванию.
Теперь группировка и сортировка уже работают, просто невозможно отфильтровать определенный category_id
Ожидаемый результат
| User | Total posts |
|-------|-------------|
| Smith | 11 |
| Ivy | 8 |
| Paul | 3 |