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字符串转成JSON
Nov 07 Javascript
jquery中获得元素尺寸和坐标的方法整理
May 18 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
Apr 05 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
Nov 23 Javascript
js自定义弹框插件的封装
Aug 24 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
angularJS实现不同视图同步刷新详解
Oct 09 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
Nov 08 Javascript
Vue动态组件与异步组件实例详解
Feb 23 Javascript
微信小程序实现搜索框功能及踩过的坑
Jun 19 Javascript
js异步接口并发数量控制的方法示例
Nov 22 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中显示格式化的用户输入
2006/10/09 PHP
用Flash图形化数据(一)
2006/10/09 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
php图片加中文水印实现代码分享
2012/10/31 PHP
给ECShop添加最新评论
2015/01/07 PHP
php析构函数的简单使用说明
2015/08/24 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
jquery中filter方法用法实例分析
2015/02/06 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
浅谈Vue内置component组件的应用场景
2018/03/27 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
Python全栈之列表数据类型详解
2019/10/01 Python
python批量修改xml属性的实现方式
2020/03/05 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
Python中return函数返回值实例用法
2020/11/19 Python
python实现经典排序算法的示例代码
2021/02/07 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
医院后勤自我鉴定
2013/10/13 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
第一军规观后感
2015/06/12 职场文书
德能勤绩工作总结
2015/08/11 职场文书