2014-11-20 4 views
0

У меня есть вопрос о том, как конвертировать MySQL запрос MongoDB в LaravelLeftJoin MongoDB Laravel

В MySQL я оставил присоединиться запрос, но в Laravel-MongoDB я не вижу же левое соединение запрос.

MySQL запрос

\DB::table('landingpages')->leftjoin('campaigns', 'campaigns.id', '=', 'landingpages.campaign_id')->get(); 

меняю в моем MongoDB

\DB::collection('landingpages')->leftjoin('campaigns', 'campaigns.id', '=', 'landingpages.campaign_id')->get(); 

Но это не работает.

+0

MongoDB не присоединяется. Вы уверены, что это поддерживается? – ceejayoz

+0

В качестве пояснения: MongoDB ПОДДЕРЖИВАЕТ СОЕДИНЕНИЯ, он просто делает их либо встроенными, либо вручную клиентскими. Это одно и то же, и вы можете закодировать для повторения JOINs (Yii2 может) в вашем приложении. Похоже, что mantainer этой библиотеки не думал, что они хотят добавить такую ​​функциональность. – Sammaye

+0

Да. Я знаю, что MongoDB не поддерживает Join. но я хочу решить проблему. Помогите мне решить проблему. Поддержка MongoDB встроена и отображена/уменьшена, но я не знаю, как ее использовать. – kayoka

ответ

2

Вы не можете использовать какой-либо «Join» в mongodb. Это не реляционная база данных.

4

Возможно, вы используете jenssegers's mongo db library в laravel. Да, вы не можете использовать Left Join или любое соединение, используя эту библиотеку, потому что mongo db не поддерживает объединения. Кстати, вы можете сделать это вручную, перейдя через массив результатов. Mongodb не эффективен для подобных работ.

+0

Я пишу код, чтобы перечислить всю запись. если я много использую цикл. Это не хорошо для перфорации. Я использую jenssegers mongodb. Другая идея? – kayoka

+0

Mongo DB хорош для больших данных, но в некоторых ситуациях он отстой, и в некоторых случаях вы не можете писать эффективный запрос с ним. Вы сталкиваетесь с проблемами, если используете меньше базы данных схемы, поэтому mysql настолько популярен. посмотреть это видео, вы получите некоторое представление: https://www.youtube.com/watch?v=70O3kGUFmgo – interstellarDust

0

С Mongo 3.2 и далее вы можете использовать оператор $lookup для выполнения левого внешнего соединения.

Синтаксис

{ 
    $lookup: 
    { 
     from: <collection to join>, 
     localField: <field from the input documents>, 
     foreignField: <field from the documents of the "from" collection>, 
     as: <output array field> 
    } 
} 

В Laravel вы можете использовать jenssegers/laravel-mongodb библиотеку и использовать raw expression для достижения левого внешнего соединения.

используя построитель MongoDB запроса

// Returns the original MongoCursor. 
DB::collection('landingpages')->raw((function($collection) { 
     return $collection->aggregate([ 
     [ 
      '$lookup' => [ 
      'from' => 'campaigns', 
      'localField' => 'campaign_id', 
      'foreignField'=> 'id', 
      'as' => 'campaign' 
      ] 
     ] 
     ]); 
})); 

использованием moloquent

// Returns a collection of LandingPage models. 
LandingPage::raw((function($collection) { 
     return $collection->aggregate([ 
     [ 
      '$lookup' => [ 
      'from' => 'campaigns', 
      'localField' => 'campaign_id', 
      'foreignField'=> 'id', 
      'as' => 'campaign' 
      ] 
     ] 
     ]); 
})); 
Смежные вопросы