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实现运行代码需要刷新的解决方法
Aug 18 Javascript
用函数式编程技术编写优美的 JavaScript_ibm
May 16 Javascript
表单JS弹出填写提示效果代码
Apr 16 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
May 19 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
Dec 25 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 Javascript
微信小程序 flex实现导航实例详解
Apr 26 Javascript
ajax请求data遇到的问题分析
Jan 18 Javascript
微信小程序实现蒙版弹窗效果
Nov 01 Javascript
6种JavaScript继承方式及优缺点(小结)
Feb 06 Javascript
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实现 使用PHP数组内部指针操作函数
2010/10/12 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
js实现window.open不被拦截的解决方法汇总
2014/10/30 Javascript
js的回调函数详解
2015/01/05 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Vue配置marked链接添加target="_blank"的方法
2019/07/19 Javascript
小程序两种滚动公告栏的实现方法
2019/09/17 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Python中bisect的用法
2014/09/23 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
Python网络编程详解
2017/10/31 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
c/c++某大公司的两道笔试题
2014/02/02 面试题
90后毕业生的求职信范文
2013/09/21 职场文书
工地安全生产标语
2014/06/06 职场文书
出纳试用期自我评价
2015/03/10 职场文书
2016关于学习党章的心得体会
2016/01/15 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python