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 相关文章推荐
输入自动提示搜索提示功能的javascript:sugggestion.js
Sep 02 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
Dec 14 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
JS+html5制作简单音乐播放器
Sep 13 Javascript
vue2.0+vue-dplayer实现hls播放的示例
Mar 02 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
zepto.js 实时监听输入框的方法
Dec 04 Javascript
详解element-ui设置下拉选择切换必填和非必填
Jun 17 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
JavaScript代码实现微博批量取消关注功能
Feb 05 Javascript
Vue + iView实现Excel上传功能的完整代码
Jun 22 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入门学习知识点七 PHP函数的基本应用
2011/07/14 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
laravel-admin 实现给grid的列添加行数序号的方法
2019/10/08 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
2013/12/10 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
Vue.js每天必学之过滤器与自定义过滤器
2016/09/07 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python进度条的制作代码实例
2019/08/31 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
汽车检测与维修专业求职信
2014/07/04 职场文书
总经理岗位职责
2015/02/04 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
给病人的慰问信
2015/03/23 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python