共计 1724 个字符,预计需要花费 5 分钟才能阅读完成。
自动写代码机器人,免费开通
这篇文章主要介绍 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 如何实现同库联表查询方法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!
向 AI 问一下细节