Leftjoin mongodb laravel

时间:2014-11-20 03:53:26

标签: mongodb laravel mongodb-query aggregation-framework

我有一个关于如何在Laravel中将mysql查询转换为MongoDB的问题

在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();

但它不起作用。

3 个答案:

答案 0 :(得分:6)

您可能在laravel中使用jenssegers's mongo db library。是的,您不能使用Left Join或使用该库的任何类型的连接,因为mongo db不支持连接。顺便说一句,您可以通过循环遍历结果数组来手动完成。 Mongodb对于这种加入工作效率不高。

答案 1 :(得分:3)

你不能使用任何类型的加入'在mongodb。它是非关系型数据库。

答案 2 :(得分: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'
          ]
        ]
      ]);
 }));