😎
MongoDBでのJOIN
MongoDBではJOINができない、というのは古い知識であり、間違いです。
バージョン3.2から$lookup
が導入され、JOINができるようになりました。
以下、例としてordersコレクションとproductsコレクションがある前提で、productsコレクションのデータをordersコレクションにJOINするサンプルを示します。
db.orders.aggregate([
{
$lookup: {
from: 'products',
localField: 'product_id', //ordersテーブルにあるフィールド
foreignField: 'id', //productsテーブルにあるフィールド
as: 'product'
}
}
])
SQL的に書き直すと以下のようになります。
SELECT *
FROM orders AS o
LEFT OUTER JOIN products AS p
ON o.product_id = p.id
注意点(SQL JOINとの相違点)として、$lookup
でJOINしたフィールドは、対象のドキュメントが1つであっても必ずlistに格納されます。なので、1つにする場合は$unwind
を使います。
db.orders.aggragate([
{
$lookup: {...}
},
{
$unwind: 'product'
}
])
Discussion