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 相关文章推荐
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
页面使用密码保护代码
Apr 10 Javascript
JS交换变量的方法
Jan 21 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
Bootstrap按钮下拉菜单组件详解
May 10 Javascript
轻松掌握JavaScript享元模式
Aug 27 Javascript
AngularJS封装指令方法详解
Dec 12 Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
Jan 09 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
Mar 06 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
详解vue-router的导航钩子(导航守卫)
Nov 02 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
js时间控件只显示年月
2017/01/08 Javascript
js实现上下左右弹框划出效果
2017/03/08 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
python搜索指定目录的方法
2015/04/29 Python
Python解惑之整数比较详解
2017/04/24 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python xpath获取页面注释的方法
2019/01/14 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
Python yield的用法实例分析
2020/03/06 Python
Python 防止死锁的方法
2020/07/29 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
python 爬取小说并下载的示例
2020/12/07 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
户外亲子活动策划方案
2014/02/07 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
个人委托函范文
2015/01/29 职场文书
社会实践活动总结
2015/02/05 职场文书
西游降魔篇观后感
2015/06/15 职场文书
三十年同学聚会致辞
2015/07/28 职场文书