mongoose中利用populate处理嵌套的方法


Posted in Javascript onMay 26, 2017

前言

nodejs在使用mongdb数据库中经常会使用到嵌套,比如一个多级分类等。这里我使用学校-->学院-->学生来展示使用populate处理嵌套。

定义modal

在模式中,我们需要使用Schema.ObjectId来表示要指向数据在mongodb数据库中的_id。

学校

在学校的Schema中,colleges属性是要包含的学院的_id属性数组。

var SchoolSchema = new Schema({
 name: String,
 colleges: [{
 type: Schema.ObjectId,
 ref: 'College'
 }],
 createTime: {
 type: Date,
 default: Date.now()
 }
});
var School = mongoose.model('School', SchoolSchema);

学院

var CollegeSchema = new Schema({
 name: String,
 students: [{
 type: Schema.ObjectId,
 ref: 'Student'
 }],
 createTime: {
 type: Date,
 default: Date.now()
 }
});
var College = mongoose.model('College', CollegeSchema);

学生

var StudentSchema = new Schema({
 name: String,
 sex: String,
 age: Number,
 createTime: {
 type: Date,
 default: Date.now()
 }
});
var Student = mongoose.model('Student', StudentSchema);

查找

直接查找

查找学校并找到指向的学院

School
 .find()
 .populate('colleges', ['_id','name'])
 .exec((err, schools) => {
 if (err) {
 console.log(err)
 }
 console.log(schools)
 })

populate的第一个参数是学校表中需要指向学院表的属性,即colleges;第二个参数为要在学院中查找的属性。如果不填写第二个参数,则默认全都查出。

这样查找出的结果中,学院的学生属性是该学院包含的学生的_id属性。如果需要都查找出来需要使用嵌套populate。

嵌套

School
 .find()
 .populate({
 path: 'colleges',
 select: ['_id', 'name'],
 // model: 'College',
 populate: {
 path: 'students',
 select: ['_id', 'name']
 // model: 'Student'
 }
 })
 .sort({
 createTime: -1
 }).exec(function(err, schools) {
 if (err) {
 console.log(err)
 }
 });

总结

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

Javascript 相关文章推荐
JS延迟加载(setTimeout) JS最后加载
Jul 15 Javascript
IE下js调试工具Companion.JS
Oct 15 Javascript
Javascript的表单验证-提交表单
Mar 18 Javascript
javascript中不易分清的slice,splice和split三个函数
Mar 29 Javascript
Javascript实现前端简单的路由实例
Sep 11 Javascript
bootstrapValidator.min.js表单验证插件
Feb 09 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 Javascript
原生JS实现的简单轮播图功能【适合新手】
Aug 17 Javascript
Vue实现附件上传功能
May 28 Javascript
详解JavaScript原型与原型链
Nov 16 Javascript
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Angularjs修改密码的实例代码
May 26 #Javascript
详解vue.js的devtools安装
May 26 #Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
May 26 #Javascript
vue.js获取数据库数据实例代码
May 26 #Javascript
详解通过JSON数据使用VUE.JS
May 26 #Javascript
JS中去掉array中重复元素的方法
May 26 #Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
May 26 #Javascript
You might like
PHP-FPM实现性能优化
2016/03/31 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
splice slice区别
2006/10/09 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
Vue3新特性之在Composition API中使用CSS Modules
2020/07/13 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python字典多条件排序方法实例
2014/06/30 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
Django实现组合搜索的方法示例
2018/01/23 Python
python实现k-means聚类算法
2018/02/23 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
小学生新学期寄语
2014/01/19 职场文书
运动会标语
2014/06/21 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
语文复习计划
2015/01/19 职场文书
地陪导游欢迎词
2015/01/26 职场文书
杜甫草堂导游词
2015/02/03 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
Win7/8.1用户可以免费升级到Windows 11系统吗?
2021/11/21 数码科技
Python加密与解密模块hashlib与hmac
2022/06/05 Python