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 写的一个简单的timer
Jul 30 Javascript
jQuery输入城市查看地图使用介绍
May 08 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
jQuery实现返回顶部功能
Feb 23 Javascript
IE下JS保存图片的简单实例
Jul 15 Javascript
layui选项卡效果实现代码
May 19 Javascript
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
Aug 08 Javascript
this.$toast() 了解一下?
Apr 18 Javascript
微信小程序实现授权登录
May 15 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 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模拟js函数unescape的函数代码
2012/10/20 PHP
php的memcache类分享(memcache队列)
2014/03/26 PHP
简单了解WordPress开发中update_option()函数的用法
2016/01/11 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
如何判断图片地址是否失效
2007/02/02 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
2014/06/05 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
jquery图片切换插件
2015/03/16 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
python字符串常用方法
2018/06/14 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
Python 中如何写注释
2020/08/28 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
运动会广播稿500字
2014/01/28 职场文书
党支部培养考察意见
2015/06/02 职场文书
python垃圾回收机制原理分析
2022/04/13 Python