Mongodb $lookup 用法簡單介紹


$lookup  是 Mongodb 3.2版本 新增的聚合框架中的一種查詢方式; 主要用來實現多表鏈接查詢; 相當關系型數據庫中多表鏈接查詢。

一、基本語法及主要功能

1. 主要功能 是將每個輸入待處理的文檔,經過$lookup 階段的處理,輸出的新文檔中會包含一個新生成的數組列(戶名可根據需要命名新key的名字 )。數組列存放的數據 是 來自 被Join 集合的適配文檔,如果沒有,集合為空(即 為[ ])

2.主要語法:

  db.collection.aggregate([{
        $lookup: {
               from: "<collection to join>",
               localField: "<field from the input documents>",
               foreignField: "<field from the documents of the from collection>",
               as: "<output array field>"
             }
    })

  

3.語法的解釋說明

語法值 解釋說明
from
同一個數據庫下等待被Join的集合。
localField

源集合中的match值,如果輸入的集合中,某文檔沒有 localField

這個Key(Field),在處理的過程中,會默認為此文檔含

有 localField:null的鍵值對。

foreignField
待Join的集合的match值,如果待Join的集合中,文檔沒有foreignField
值,在處理的過程中,會默認為此文檔含有 foreignField:null的鍵值對。
as
為輸出文檔的新增值命名。如果輸入的集合中已存在該值,則會覆蓋掉,

 

二、兩張表關聯查詢

1.測試數據准備

db.Customer.insert({customerCode:1,name:"customer1",phone:"13112345678",address:"test1"})

db.Customer.insert({customerCode:2,name:"customer2",phone:"13112345679",address:"test2"}) db.Order.insert({orderId:1,orderCode:"order001",customerCode:1,price:200}) db.Order.insert({orderId:2,orderCode:"order002",customerCode:2,price:400})

2. $lookup 查詢兩張表

db.Customer.aggregate(
    [{        $lookup: {
           from: "Order", localField: "customerId", foreignField: "customerId", as: "customerOder" } }  ])

效果如下:

 

 

 $lookup 中的as:"customerOrder"  聚合為 一個數組類型字段

 

三、三張表關聯查詢

1.准備數據

db.Customer.insert({customerCode:1,name:"customer1",phone:"13112345678",address:"test1"})

db.Customer.insert({customerCode:2,name:"customer2",phone:"13112345679",address:"test2"}) db.Order.insert({orderId:1,orderCode:"order001",customerCode:1,price:200}) db.Order.insert({orderId:2,orderCode:"order002",customerCode:2,price:400}) db.orderItem.insert({itemId:1,productName:"apples",qutity:2,orderId:1}) db.orderItem.insert({itemId:2,productName:"oranges",qutity:2,orderId:1}) db.orderItem.insert({itemId:3,productName:"mangoes",qutity:2,orderId:1}) db.orderItem.insert({itemId:4,productName:"apples",qutity:2,orderId:2}) db.orderItem.insert({itemId:5,productName:"oranges",qutity:2,orderId:2}) db.orderItem.insert({itemId:6,productName:"mangoes",qutity:2,orderId:2})

2.$lookup 查詢三張表

    db.Order.aggregate([{
        $lookup: {
               from: "Customer", localField: "customerCode", foreignField: "customerCode", as: "curstomer" } },  { $lookup: { from: "orderItem", localField: "orderId", foreignField: "orderId", as: "orderItem" } } }] 

效果如下:

 

 $lookup 中的as:"customerOrder"  聚合為 一個數組類型字段

$lookup 中的as:"orderItem"  聚合為 一個數組類型字段

 

由此可見,關聯多少個人表,就可以使用多少個$lookup來做關聯;

至此 $lookup 簡單用法介紹完畢!

 

1.測試數據准備


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM