博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongo同库联表查询
阅读量:6265 次
发布时间:2019-06-22

本文共 1806 字,大约阅读时间需要 6 分钟。

这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询)
我用到的联表查询有两种,一种是mongoose的,一种是

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以上貌似可以转,没试过)

参考文章

转载地址:http://yycpa.baihongyu.com/

你可能感兴趣的文章
jadclipse
查看>>
// 1.什么是JOSN?
查看>>
SQL语句详细汇总
查看>>
如何保护.net中的dll文件(防破解、反编译)
查看>>
Python 装饰器
查看>>
Docker 网络模式
查看>>
[POI2013]Usuwanka
查看>>
problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 算法分析...
查看>>
nodejs + CompoundJS 资源
查看>>
转:C#并口热敏小票打印机打印位图
查看>>
scau 17967 大师姐唱K的固有结界
查看>>
spring之<bean>实例化
查看>>
hereim_美句_2
查看>>
蓝桥杯2017国赛JAVAB组 填字母游戏 题解
查看>>
25.安装配置phantomjs
查看>>
解决sublime3 package control显示There are no packages available for installation
查看>>
FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链
查看>>
Python随笔12
查看>>
数组完成约瑟夫环
查看>>
[LeetCode]Letter Combinations of a Phone Number
查看>>