Laravel Совокупное соответствие Mongodb не работает - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь получить сообщения пользователей с помощью mongodb в laravel, этот запрос отлично работает в оболочке mongodb, но не работает в laravel, и он дает мне эту ошибку:

Объект спецификации стадии конвейера должен содержать ровно одно поле.

это мой запрос в оболочке mongodb:

db.instaPosts.aggregate([ 
 {"$match" :{ "userid" : "1507073550"}}, 

{"$group" : 
{ "_id" : "$post.location.id", 
"location" : {"$first":"$post.location.name"},

"count":{ "$sum" : 1}}} 
])

и вот результаты:

{ "_id" : null, "location" : null, "count" : 7 }
{ "_id" : "332558707", "location" : "Daryache Chitgar,Tehran,Iran", "count" : 1 }
{ "_id" : "250445386", "location" : "دانشگاه علم و فرهنگ", "count" : 1 }
{ "_id" : "1343757649052341", "location" : "Agor Caffe", "count" : 1 }
{ "_id" : "111106416225578", "location" : "Santiago Bernabeu, Madrid", "count" : 1 }
{ "_id" : "506047058", "location" : "Cardiff City Stadium", "count" : 1 }

а это мой контроллер:

        $places = Posts::raw(function ($collection){
            return $collection->aggregate([
               [
                   '$match' => [
                           'userid' => [ '$eq' => '1507073550']
                   ],
                    '$group'=> [
                        '_id' => '$post.location.id',
                        'location' => [
                            '$first'=>'$post.location.name'
                        ],
                        'total' => [
                            '$sum' => 1
                        ],
                    ]
               ]
            ]);
        });

точно такие же вещи! но это не работает.

1 Ответ

0 голосов
/ 13 июля 2020

Наконец-то нашел решение!

        $places = Posts::raw(function ($collection){
            return $collection->aggregate([
               [
                   [
                   '$match' => [
                           'userid' => [ '$eq' => '1507073550']
                      ],
                   ],
                   [
                    '$group'=> [
                        '_id' => '$post.location.id',
                        'location' => [
                            '$first'=>'$post.location.name'
                        ],
                        'total' => [
                            '$sum' => 1
                        ],
                      ]
                   ]
               ]
            ]);
        });

Мне нужно было заключить $ match и $ group в [],

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...