mongodb如何实现同库联表查询方法
这篇文章主要介绍mongodb如何实现同库联表查询方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
注意:这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询)
我用到的联表查询有两种,一种是mongoose的populate,一种是$lookup
一、populate
populate是使用外键关联子表
例如现在有一张订单表结构(动态外键):
varorderSchema=newmongoose.Schema({uid:{type:String,required:true},//用户idamount:{type:Number,required:true},oType:{type:Number,required:true},//订单类型status:{type:Number,required:true},//订单的状态:1完成2未完成3失效})
用户表:
varuserSchema=newmongoose.Schema({phone:String,status:String,createdAt:Date,updatedAt:Date})
现在我想根据查询order表,并返回对应用户phone字段
order.find().populate({path:'uid',model:User,select:'_idreal_namephonebankcard'}).exec(function(err,order){//order:{//uid:{//phone:'15626202254',//status:"expand",//createdAt:Date,//updatedAt:Date//},//amount:5000,//oType:2,//订单类型//status:1,//订单的状态:1完成2未完成3失效//}});
这里order表的uid指向了user表的_id字段,当然也可以在新建表的时候定义外键,这里就不细说了
二、$lookup
lookup就是使用aggregate的$lookup属性,直接上官网例子非常好懂
orders表
{"_id":1,"item":"abc","price":12,"quantity":2}{"_id":2,"item":"jkl","price":20,"quantity":1}{"_id":3}
inventory表
{"_id":1,"sku":"abc",description:"product1","instock":120}{"_id":2,"sku":"def",description:"product2","instock":80}{"_id":3,"sku":"ijk",description:"product3","instock":60}{"_id":4,"sku":"jkl",description:"product4","instock":70}{"_id":5,"sku":null,description:"Incomplete"}{"_id":6}
db.orders.aggregate([{$lookup:{from:"inventory",localField:"item",foreignField:"sku",as:"inventory_docs"}}])
就是使用order的item字段作为inventory表的查询条件{sku: item},并赋值给inventory_docs字段,但值得注意的是两个字段的类型必须一样(3.5以上貌似可以转,没试过)
以上是“mongodb如何实现同库联表查询方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。