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 ajax dataType值为text json探索分享
Sep 23 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
Oct 16 Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
Jun 09 Javascript
使用递归遍历对象获得value值的实现方法
Jun 14 Javascript
js移动焦点到最后位置的简单方法
Nov 25 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
如何编写一个完整的Angular4 FormText 组件
Nov 18 Javascript
vue实现分页组件
Jun 16 Javascript
JS实现动态添加外部js、css到head标签的方法
Jun 05 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
Nov 05 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
默默简单的写了一个模板引擎
2007/01/02 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
使用Codeigniter重写insert的方法(推荐)
2017/03/23 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
vue+php实现的微博留言功能示例
2019/03/16 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Ubuntu下Python2与Python3的共存问题
2018/10/31 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
abstract class和interface有什么区别
2013/08/04 面试题
校园广播稿500字
2014/02/04 职场文书
幼儿园家长评语
2014/02/10 职场文书
关于梦想的演讲稿
2014/05/05 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
2015年元旦标语大全
2014/12/09 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
承诺书模板大全
2015/05/04 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers