mongodb多表聯(lián)合查詢?cè)趺磳?shí)現(xiàn)

小億
276
2023-11-18 13:45:16
欄目: 云計(jì)算

在MongoDB中,常用的實(shí)現(xiàn)多表聯(lián)合查詢的方法有兩種:嵌套查詢和引用字段。

  1. 嵌套查詢(Embedding): 在一個(gè)集合中嵌套另一個(gè)集合的文檔。通過(guò)嵌套查詢,可以將相關(guān)聯(lián)的數(shù)據(jù)放在同一個(gè)文檔中,從而實(shí)現(xiàn)多表聯(lián)合查詢的效果。

    示例代碼:

    // 創(chuàng)建一個(gè)用戶集合
    db.users.insertMany([
      { _id: "1", name: "Tom", age: 20, address: "ABC Street" },
      { _id: "2", name: "John", age: 25, address: "XYZ Street" },
      // ...
    ])
    
    // 創(chuàng)建一個(gè)訂單集合
    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"
        }
      }
    ])
    
  2. 引用字段(Referencing): 在一個(gè)集合中使用外鍵引用另一個(gè)集合的文檔。通過(guò)在一個(gè)集合中添加一個(gè)字段來(lái)引用另一個(gè)集合的文檔,然后通過(guò)該字段進(jìn)行關(guān)聯(lián)查詢。

    示例代碼:

    // 創(chuàng)建一個(gè)用戶集合
    db.users.insertMany([
      { _id: "1", name: "Tom", age: 20, address: "ABC Street" },
      { _id: "2", name: "John", age: 25, address: "XYZ Street" },
      // ...
    ])
    
    // 創(chuàng)建一個(gè)訂單集合
    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"
        }
      }
    ])
    

以上兩種方法各有優(yōu)缺點(diǎn),具體使用哪種方法取決于數(shù)據(jù)的特點(diǎn)和查詢的需求。

0