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代码
May 03 Javascript
js中onload与onunload的使用示例
Aug 25 Javascript
js判断两个日期是否相等的方法
Sep 10 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
Node.js获取前端ajax提交的request信息
Feb 20 Javascript
jQuery Tree Multiselect使用详解
May 02 jQuery
node.js基础知识小结
Feb 26 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
解决layui页面按钮点击无反应,也不报错的问题
Sep 29 Javascript
Vue路由管理器Vue-router的使用方法详解
Feb 05 Javascript
OpenLayers3实现图层控件功能
Sep 25 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去除HTML标签实例
2013/11/06 PHP
php安装swoole扩展的方法
2015/03/19 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
javascript第一课
2007/02/27 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
讲解python参数和作用域的使用
2013/11/01 Python
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python 常用string函数详解
2016/05/30 Python
Python构建网页爬虫原理分析
2017/12/19 Python
python Crypto模块的安装与使用方法
2017/12/21 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
儿童python练习实例
2018/05/27 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
Final类有什么特点
2012/04/25 面试题
天猫活动策划方案
2014/08/21 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
签字仪式主持词
2015/07/03 职场文书
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js
Python Pandas 删除列操作
2022/03/16 Python
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android