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 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
jQuery中appendTo()方法用法实例
Jan 08 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
微信小程序搜索组件wxSearch实例详解
Jun 08 Javascript
JavaScript学习笔记之惰性函数示例详解
Aug 27 Javascript
使用JavaScript实现node.js中的path.join方法
Aug 12 Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 Javascript
Vue实现商品详情页的评价列表功能
Sep 04 Javascript
vue实现图片懒加载的方法分析
Feb 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
PHP安装全攻略:APACHE
2006/10/09 PHP
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
PHP define函数的使用说明
2008/08/27 PHP
destoon官方标签大全
2014/06/20 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
Python 内置函数complex详解
2016/10/23 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
python绘制地震散点图
2019/06/18 Python
pycharm快捷键汇总
2020/02/14 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
灵泰克Java笔试题
2016/01/09 面试题
施工安全协议书
2013/12/11 职场文书
党员评议思想汇报
2014/10/08 职场文书
公务员政审材料范文
2014/12/23 职场文书
2015年小学开学寄语
2015/02/27 职场文书
Windows server 2012搭建FTP服务器
2022/04/29 Servers