在MongoDB中,常用的實現多表聯合查詢的方法有兩種:嵌套查詢和引用字段。
嵌套查詢(Embedding): 在一個集合中嵌套另一個集合的文檔。通過嵌套查詢,可以將相關聯的數據放在同一個文檔中,從而實現多表聯合查詢的效果。
示例代碼:
// 創建一個用戶集合
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"
}
}
])
引用字段(Referencing): 在一個集合中使用外鍵引用另一個集合的文檔。通過在一個集合中添加一個字段來引用另一個集合的文檔,然后通過該字段進行關聯查詢。
示例代碼:
// 創建一個用戶集合
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"
}
}
])
以上兩種方法各有優缺點,具體使用哪種方法取決于數據的特點和查詢的需求。