Как получить размер поддокумента (количество) в laravel mongodb jenssegers - PullRequest
0 голосов
/ 14 октября 2018

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

$answers = Answers::project([
    'comments'=>0, 
    'comments_count' => [
        '$size' => '$comments'
    ]])
    ->where('question_id',$request->question_id)
    ->get();

Ошибка: - "message": "Неподдерживаемая опция проекции:comments_count: {$ size: \ "comments \"} ",

Поддерживается ли агрегат $ size в пакете jenssegers mongodb laravel?если да, то это правильный способ его использования,

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете выполнить необработанный запрос с агрегатом, проверьте ниже запрос

$answers = Answers::raw(function($collection) use ($request) {
            return $collection->aggregate([
                [
                    '$match' => [
                        'question_id' => $request->question_id
                    ]
                ],
                [
                    '$project' => [
                        'answer'=>1,
                        'user'=>1,
                        'comment_count' => [
                            '$size' => [ 
                                '$ifNull'=> ['$comments', []] 
                            ] 
                        ]
                    ]
                ]
            ]);
        });

Это рабочий запрос в laravel 5.6 с jensseger mongodb.

0 голосов
/ 14 октября 2018

в зависимости от этой статьи https://laravel.com/docs/5.7/eloquent-relationships вы можете использовать withCount

в Project модели вы можете добавить protected переменная withCount

protected $withCount = ['comments'];
//comments is function name of relation between project and comments

будетвозвращение comments_count

...