您当前的位置: 首页 >  mongodb

小志的博客

暂无认证

  • 0浏览

    0关注

    1217博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

MongoDB——聚合管道之$lookup操作

小志的博客 发布时间:2022-04-24 23:09:04 ,浏览量:0

目录
    • 一、$lookup的概述
    • 二、$lookup的语法
    • 三、数据准备
    • 四、关联查询示例

一、$lookup的概述
  • Mongodb 3.2版本新增,主要用来实现多表关联查询, 相当关系型数据库中多表关联查询。
  • 每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组(可根据需要命名新key )。数组列存放的数据是来自被Join集合的适配文档,如果没有,集合为空(即 为[ ])
二、$lookup的语法
  • $lookup的语法

    db.collection.aggregate([{ 
    	$lookup: { 
    		from: "",
     		localField: "", 
     		foreignField: "", 
     		as: "" 
     	} 
    })
    
  • $lookup的解释

    属性作用from同一个数据库下等待被Join的集合。localField源集合中的match值,如果输入的集合中,某文档没有 localField这个Key(Field),在处理的过程中,会默认为此文档含有 localField:null的键值对。foreignField待Join的集合的match值,如果待Join的集合中,文档没有foreignField值,在处理的过程中,会默认为此文档含有 foreignField:null的键值对。as为输出文档的新增值命名。如果输入的集合中已存在该值,则会覆盖掉
  • $lookup语法的图解 在这里插入图片描述

三、数据准备
  • 新增客户表数据

    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})
    
四、关联查询示例
  • 根据customerCode关联查询客户表和订单表信息

    db.customer.aggregate([ 
    	{$lookup: { 
    		from: "order", 
    		localField: "customerCode", 
    		foreignField: "customerCode", 
    		as: "customerOrder" 
    		}
    	} 
    ]).pretty()
    

    在这里插入图片描述

  • 根据customerCode关联查询订单表和客户表信息,并且根据orderId查询订单表和订单详情表信息。

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

    在这里插入图片描述 在这里插入图片描述

关注
打赏
1661269038
查看更多评论
立即登录/注册

微信扫码登录

0.0447s