MongoDBで複数のテーブルを結合してクエリを行う方法
MongoDBでは主によく使用される複数のテーブルの結合を処理する方法が2つあり、それらはネストのクエリと参照のフィールドである。
- ネストクエリ(Embedding)ネストクエリ(Embedding)は、ドキュメント内に別のコレクションをネストする機能です。ネストクエリでは、関連するデータを一つのドキュメント中に保持することで、複数テーブル結合と同等のクエリが実行できます。
- ネイティブな日本語で言い換えた文を1つだけ提示する。
- ユーザーコレクションの作成:db.users.insertMany([
{ “_id” : “1”, “name” : “Tom”, “age” : 20, “address” : “ABC Street” },
{ “_id” : “2”, “name” : “John”, “age” : 25, “address” : “XYZ Street” },
// …
])注文コレクションの作成:
db.orders.insertMany([
{ “_id” : “1”, “userId” : “1”, “products” : [“product1”, “product2”], “amount” : 100 },
{ “_id” : “2”, “userId” : “2”, “products” : [“product3”], “amount” : 50 },
// …
])ユーザーとその注文の照会:
db.users.aggregate([
{
$lookup: {
from: “orders”,
localField: “_id”,
foreignField: “userId”,
as: “orders”
}
}
]) - 別のコレクションのドキュメントを、コレクション内のドキュメントから参照する。(参照されるコレクション内にフィールドを追加して別のコレクションのドキュメントを参照し、そのフィールドで関連クエリを行う。)
- ネイティブで日本語に言い換えてください。1つだけオプションが必要です。
- ユーザーコレクションを作成します。
db.users.insertMany([
{ _id: “1”, name: “Tom”, age: 20, address: “ABC Street” },
{ _id: “2”, name: “John”, age: 25, address: “XYZ Street” },
// …
])注文コレクションを作成します。
db.orders.insertMany([
{ _id: “1”, userId: “1”, products: [“product1”, “product2”], amount: 100 },
{ _id: “2”, userId: “2”, products: [“product3”], amount: 50 },
// …
])ユーザーとその注文を照会します。
db.users.aggregate([
{
$lookup: {
from: “orders”,
localField: “_id”,
foreignField: “userId”,
as: “orders”
}
}
])
どちらの方法も一長一短があり、どちらを採用するかはデータの特徴や照会要求に依存します。