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选择头像并实时显示的代码
Jun 27 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
Dec 15 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
JavaScript实现无刷新上传预览图片功能
Aug 02 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
Vue-Router的使用方法
Sep 05 Javascript
vue 巧用过渡效果(小结)
Sep 22 Javascript
vue实现移动端返回顶部
Oct 12 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小技巧之函数重载
2014/06/02 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
过虑特殊字符输入的js代码
2010/08/05 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
常用DOM整理
2015/06/16 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
使用PYTHON创建XML文档
2012/03/01 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
大学生创业感言
2014/01/25 职场文书
21岁生日感言
2014/02/27 职场文书
环卫工作汇报材料
2014/10/28 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫