Mongoose的populate 查询
在使用MongoDB的时候 使用populate 方法来代替关系型数据库的join,在定义一个Schema的时候可以指定其中的字段(属性)是另一个Schema的引用,在查询文档的时候就可以使用populate方法通过引用Schema和id找到关联的另一个文档或者文档的指定字段值。下面是一个简单的例子。
//引入包
var mongoose = require('mongoose')
var app = require('express')()
var mongoose = require('mongoose')
//设置数据库连接
mongoose.connect('mongodb://localhost/test')// 定义学生模式
var StudentSchema = new mongoose.Schema({name: String,clazzID : {type : mongoose.Schema.ObjectId,ref : 'Clazz' // clazz的Model名}
})
// 模式添加方法 根据学生id 去查询班级信息
StudentSchema.statics = {findClazzNameByStudentId:function(studentId, callback){return this.findOne({_id : studentId}).populate('clazzID') // 关联查询.exec(callback)}
}// 定义班级模式
var ClazzSchema = new mongoose.Schema({clazzName: String
});// 模型model
var Student = mongoose.model('Student',StudentSchema)
var Clazz = mongoose.model('Clazz',ClazzSchema)// 新建班级文档并保存
/*var clazz = new Clazz({clazzName:'体育9班'}
);
clazz.save(function (argument){console.log('true');
});
*/// 新建学生文档并保存
/*var student = new Student({name : '马冬梅',clazzID : '56e1440f508c947b0f32c16b' //体育3班的_id
})
student.save(function (err){console.log('true');
})*///在上面 学生模式,定义了findClazzNameByStudentId 方法 通过学生id 去查询其班级信息
Student.findClazzNameByStudentId('56e1446c64a8f59c0f866df3', function (err, student){if(err) console.log(err);console.log(student.name + " 在的班级: "+student.clazzID.clazzName); /*通过studentID查询到对应的学生对象,并通过关联属性clazzID获取到对应classID的班级对象,通过对象的clazzName属性返回班级名称*/
})var logger = require('morgan');
if('development' === app.get('env')){app.set('showStackError', true); // 输出报错信息app.use(logger(':method :url :status')); // 输出信息领域app.locals.pretty = true; // 源代码格式化mongoose.set('debug', true); // 数据库报错信息
}
参考地址
Mongoose的populate 查询相关推荐
- 【Mongoose】populate基本使用
在使用mongoose进行nodejs开发时,有很多场景都需要通过外键与另一张表建立关联,populate可以很方便的实现,因此总结一下populate的用法. 参考文档 https://segmen ...
- mongoose常用方法(查询篇)
条件 $or 或关系 $nor 或关系取反 $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 $in 在多个值范围内 $nin 不在多个值范围内 $all 匹配数组中 ...
- express ajax分页实例,element+express+mongoose实现分页查询
一个element配合express实现分页查询的思路与实现. 技术栈Element Express Mongoose 前端实现 前端的分页使用了Element的分页组件. @current-chan ...
- mongoose的populate
MongoDB是文档型数据库,所以它没有关系型数据库joins 特性.但是mongoose也有自己的方法来解决两个表之间的关联问题,Mongoose就是通过populate来解决这个问题的.接下来分享 ...
- 给mongoose find()/findOne()查询的结果添加额外的属性
在学习 mongoose 的时候,碰到一个需要注意的地方. 给查询结果添加额外的属性时,不能直接在这个结果对象上添加属性.原因和解决方案往下看. 假设 User 集合有一个 name 字段: cons ...
- [NodeJS] Mongoose Populate 基本使用
转载自 https://blog.csdn.net/elliott_yoho/article/details/53537147 在使用 mongoose 时,想通过一个外键与另一张表建立关联时,不知该 ...
- mongoose 笔记
快速启动 首先需要安装MongoDB和Node.js. 然后使用npm下载mongoose: npm install mongoose 接着我们直接在项目中引入mongoose,并且连接数据库就会在本 ...
- Mongo基础使用,以及在Express项目中使用Mongoose
MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...
- mongoose设置unique不生效问题解决
1.unique属于schema约束验证中的一员,他的作用主要就是让某一个字段的值具有唯一性(不能重复) 2.保持字段的唯一性使用type值:{type:String,unique:true,drop ...
最新文章
- visual studio spy使用实现后台按键_多种精华液应该如何叠加使用?
- dask想说爱你不容易
- HDU - 6610 Game(带修莫队)
- java导出表格_java怎么导出excel表格
- TimeSpan 用法 求离最近发表时间的函数
- django mysql settings
- html载入图片代码,TextVeiw加载HTML代码块内图片
- 如何重启虚拟机里的ssh服务器,通过SSH重启 vSphere 虚拟机
- 如何利用开源风控系统 TH-Nubula(星云)防止撞库?
- GP数据库(Greenplum)单机版安装
- Head First中文版教程
- ubuntu18.04配置邮件服务: postfix+dovecot+roundcube
- verilog实现pwm
- 王者荣耀英雄测试用例
- python为啥爬取数据会有重复_使用python爬取B站千万级数据
- OPC服务器软件介绍
- 解决小米远程管理下电脑出现ftp文件错误提示
- MapReduce关系代数运算——差
- python里的map是什么意思_map在python中什么意思
- win2008 R2 安装VS2003
热门文章
- 3分钟带你看懂巨龙信息大数据服务总线
- 【综合案例】原生JS实现购物商城
- python 生孩子朋友圈_生完宝宝后,你是怎样在朋友圈报喜的?这样发圈才真挚而深情...
- 震撼来袭!(USB Camera,支持同时开启多路摄像头,支持旋转、镜像)
- 关于笔记本操作系统32位和64位与内存大小的关系
- SVG —— 基于XML语法的可缩放矢量图形
- 效果奇特的HTML5动画,12个效果奇特的HTML5动画赏析 – 码农网
- 解决32位微信开发者工具黑屏
- 帆软报表调用python脚本_直连数据库实时更新数据,比python强大,可视化报表这么做简直牛...
- 高并发 限流,到底限的什么鬼 (精品长文)