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 相关文章推荐
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
Jul 25 Javascript
jquery动态加载图片数据练习代码
Aug 04 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
webapp框架AngularUI的demo改造之路
Dec 21 Javascript
JavaScript中的异常捕捉介绍
Dec 31 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
JS实现动态生成表格并提交表格数据向后端
Nov 25 Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 Javascript
jquery 动态遍历select 赋值的实例
Sep 12 jQuery
js中事件对象和事件委托的介绍
Jan 21 Javascript
原生js实现日期选择插件
May 21 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 输出缓存详解
2009/06/20 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
简单了解python PEP的一些知识
2019/07/13 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
python 伯努利分布详解
2020/02/25 Python
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
工作表现自我评价
2014/02/08 职场文书
《钱学森》听课反思
2014/03/01 职场文书
母亲节演讲稿
2014/05/27 职场文书
美术专业自荐信
2014/07/07 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
公司2014年度工作总结
2014/12/10 职场文书
父亲节寄语大全
2015/02/27 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB