前言

最近在工作中遇到一个问题,需要对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小时内与您取得联系。