查看: 28|回覆: 0

Mongodb $lookup 用法简单介绍

[複製鏈接]

1

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-7-23
發表於 2021-7-26 14:16:00 | 顯示全部樓層 |閲讀模式

$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.测试数据准备



来源:https://www.cnblogs.com/howardxu/p/15061192.html
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部