Группа Laravel mongoDB объединяется с тем, где в

Вот мой текущий код

    $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           |

0

Решение

Хорошо, основываясь на ваших (странных) коллекциях, и, если я правильно понял, это должно быть примерно так:

<?php

$category_ids = []; //categories goes here

$results = Post::raw(function($collection) use ($category_ids) {
return $collection->aggregate([
//where in...
[
'$match' => [
'category_id' => ['$in' => $category_ids]
]
],
[
'$group' => [
'_id' => '$user_id',
'count' => ['$sum' => 1]
]
],
[
'$sort' => ['count' => -1]
],
[
'$limit' => 10
],
]);
});

Первая стадия использования трубопровода $match а также $in для того, чтобы отфильтровать сообщения, где post.category_id в $category_ids,
Я должен сделать трюк!

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]