全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

mongodb实现同库联表查询方法示例

前言

最近在工作中遇到一个问题,需要对mongodb数据库进行联表查询操作,发现网上这方面的资料较少,无奈只能自己来实现了,下面话不多说了,来一起看看详细的介绍:

注意:这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询)

我用到的联表查询有两种,一种是mongoose的populate,一种是$lookup

一、populate

populate是使用外键关联子表

例如现在有一张订单表结构(动态外键):

var orderSchema = new mongoose.Schema({
 uid: { type: String, required: true }, // 用户id
 amount: { type: Number, required: true },
 oType: { type: Number, required: true }, // 订单类型
 status: { type: Number, required: true }, // 订单的状态:1完成 2未完成 3失效
})

用户表:

var userSchema = new mongoose.Schema({
 phone: String,
 status: String,
 createdAt: Date,
 updatedAt: Date
})

现在我想根据查询order表,并返回对应用户phone字段

order.find().populate({path: 'uid', model: User, select: '_id real_name phone bankcard'}).exec(function(err, order) {
 // order: {
 // uid: {
 // phone: '15626202554',
 // 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: "product 1", "instock" : 120 }
{ "_id" : 2, "sku" : "def", description: "product 2", "instock" : 80 }
{ "_id" : 3, "sku" : "ijk", description: "product 3", "instock" : 60 }
{ "_id" : 4, "sku" : "jkl", description: "product 4", "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以上貌似可以转,没试过)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

参考文章

Mongoose中的关联表查询 && 聚合查询

在mongoose中填充外键


# mongodb  # 联表查询  # 联合查询  # 两表联合查询  # MongoDB中多表关联查询($lookup)的深入讲解  # Mongodb实现的关联表查询功能【population方法】  # MongoDB各种查询操作详解  # MongoDB查询操作限制返回字段的方法  # PHP中MongoDB数据库的连接、添加、修改、查询、删除等操作实例  # MongoDB下根据数组大小进行查询的方法  # MongoDB导出查询结果到文件例子  # MongoDB如何对数组中的元素进行查询详解  # MongoDB查询技巧总结  # MongoDB查询性能优化验证及验证  # MongoDB的基础查询和索引操作方法总结  # MongoDB多表关联查询操作实例详解  # 未完成  # 的是  # 我想  # 也会  # 就不  # 说了  # 不多  # 能在  # 非常好  # 一个问题  # 这篇文章  # 有两种  # 谢谢大家  # 较少  # 只对  # 在工作中  # 官网  # 没试过  # 实现了  # 网上 


相关文章: 湖南网站制作公司,湖南上善若水科技有限公司做什么的?  建站主机系统SEO优化与智能配置核心关键词操作指南  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  高性价比服务器租赁——企业级配置与24小时运维服务  如何高效完成自助建站业务培训?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  盘锦网站制作公司,盘锦大洼有多少5G网站?  建站主机默认首页配置指南:核心功能与访问路径优化  婚礼视频制作网站,学习*后期制作的网站有哪些?  大连网站设计制作招聘信息,大连投诉网站有哪些?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  郑州企业网站制作公司,郑州招聘网站有哪些?  如何在自有机房高效搭建专业网站?  企业微网站怎么做,公司网站和公众号有什么区别?  如何在阿里云虚拟服务器快速搭建网站?  高端建站如何打造兼具美学与转化的品牌官网?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  C#怎么创建控制台应用 C# Console App项目创建方法  淘宝制作网站有哪些,淘宝网官网主页?  如何快速上传自定义模板至建站之星?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  ,有什么在线背英语单词效率比较高的网站?  如何通过虚拟机搭建网站?详细步骤解析  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  专业商城网站制作公司有哪些,pi商城官网是哪个?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何在万网自助建站中设置域名及备案?  如何用AWS免费套餐快速搭建高效网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  b2c电商网站制作流程,b2c水平综合的电商平台?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  ,在苏州找工作,上哪个网站比较好?  建站之星24小时客服电话如何获取?  西安大型网站制作公司,西安招聘网站最好的是哪个?  建站之星logo尺寸如何设置最合适?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  如何在建站之星绑定自定义域名?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  XML的“混合内容”是什么 怎么用DTD或XSD定义  东莞专业制作网站的公司,东莞大学生网的网址是什么?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何生成腾讯云建站专用兑换码?  建站之星展会模版如何一键下载生成?  如何挑选优质建站一级代理提升网站排名?  网站制作多少钱一个,建一个论坛网站大约需要多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。