mongodb做联表查询的方法是什么?
Admin 2021-05-27 群英技术资讯 1957 次浏览
有些需求会需要我们对数据库做联表查询操作,在SQL中的连表查询大家可能比较熟悉,但是不是很了解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: '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: "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以上貌似可以转,没试过)
总结
关于mongodb 联表查询的内容就介绍到这,上文为个人经验,代码仅供大家参考,需要的朋友可以看看,希望大家阅读完这篇文章能有所收获。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
MongoDB中find()函数返回一个游标,客户端通过对游标进行一些设置就能对查询结果进行有效地控制,如可以限制查询得到的结果数量、跳过部分结果、或对结果集按任意键进行排序等!这篇文章主要介绍了MongoDB中的游标,有需要的朋友们可以参考借鉴,下面来一起看看吧。
这篇文章主要给大家介绍了MongoDB之Text Search文本搜索功能的相关资料,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
下面这篇文章主要来给大家说说看“mongodb同库联表怎么进行查询”的内容,对这方面比较感兴趣的朋友可以前来参考下,希望小编整理的内容能帮助到你。
MongoDB - 连接 在本教程我们将讨论 MongoDB 的不同连接方式。 启动 MongoDB 服务 在前面的教程中,我们已经讨论了如何启动 MongoDB 服务,你只需要在 MongoDB 安装目录的 bin 目录下执行 mongodb 即可。 执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。 你可以使用 MongoDB shell 来连接 Mo..
这篇文章主要给大家介绍MongoDB mongoexport工具,包括mongoexport工具的基本介绍,常用参数,命令等等,对大家了解mongoexport工具的使用有一定的参考价值,感兴趣的朋友就继续往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008