我有一个关于如何在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();
但它不起作用。
答案 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'
]
]
]);
}));