mongodbの結合クエリ
MongoDBでは、従来のリレーショナルデータベースにおける結合クエリ(join)の機能はありません。しかし、アグリゲーションパイプライン(aggregation pipeline)を使用すれば、同様の機能を実現できます。アグリゲーションパイプラインは、MongoDBで利用可能な、強力なデータ処理ツールです。このツールを使用すると、データベース内で、データのフィルタリング、ソート、集約、変換などの複数の処理を実行できます。以下はアグリゲーションパイプラインを使用した結合クエリの例です。ユーザー情報を含むusersコレクションと注文情報を含むordersコレクションの2つのコレクションがあるとします。さらに、各注文にはユーザーコレクションとの関連付けに使用するユーザーIDフィールドがあります。
// 聚合管道查询
db.users.aggregate([
// 第一步:匹配用户
{ $match: { name: "John" } },
// 第二步:连接 orders 集合
{
$lookup: {
from: "orders",
localField: "_id",
foreignField: "userId",
as: "orders"
}
},
// 第三步:筛选所需字段
{
$project: {
name: 1,
email: 1,
orders: 1
}
}
]);
上記のクエリは、まずusersコレクションから名前が「John」であるユーザーを抽出します。$lookupステージを使用して、現在のクエリ結果に対するordersコレクションを、ユーザーIDフィールドとordersコレクションのuserIdフィールドで結び付けて結合します。最後に$projectステージで必要なフィールドを抽出します。これによって、「John」という名前のユーザーとその注文情報が取得されます。なお、アグリゲーションパイプラインの構文は複雑ですが、状況に応じて調整および拡張できます。上記はシンプルな例ですが、より複雑な結合クエリでは、実現するために更なるアグリゲーションステージを使用する必要がある場合があります。