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 无提示关闭窗口脚本
Aug 17 Javascript
js保存当前路径(cookies记录)
Dec 14 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
实例讲解避免javascript冲突的方法
Jan 03 Javascript
详解Angular-Cli中引用第三方库
May 21 Javascript
javascript 产生随机数的几种方法总结
Sep 26 Javascript
vue+swiper实现侧滑菜单效果
Dec 28 Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 Javascript
tracking.js页面人脸识别插件使用方法
Apr 16 Javascript
使用express来代理服务的方法
Jun 21 Javascript
layui递归实现动态左侧菜单
Jul 26 Javascript
详解Element-UI中上传的文件前端处理
Aug 07 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和mysql中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
解密Python中的描述符(descriptor)
2015/06/03 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
python 系统调用的实例详解
2017/07/11 Python
LRUCache的实现原理及利用python实现的方法
2017/11/21 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
十一酒店活动方案
2014/02/20 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
三人合伙协议书范本
2014/10/29 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python
使用python创建股票的时间序列可视化分析
2022/03/03 Python
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android