在使用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 查询相关推荐

  1. 【Mongoose】populate基本使用

    在使用mongoose进行nodejs开发时,有很多场景都需要通过外键与另一张表建立关联,populate可以很方便的实现,因此总结一下populate的用法. 参考文档 https://segmen ...

  2. mongoose常用方法(查询篇)

    条件 $or 或关系 $nor 或关系取反 $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 $in 在多个值范围内 $nin 不在多个值范围内 $all 匹配数组中 ...

  3. express ajax分页实例,element+express+mongoose实现分页查询

    一个element配合express实现分页查询的思路与实现. 技术栈Element Express Mongoose 前端实现 前端的分页使用了Element的分页组件. @current-chan ...

  4. mongoose的populate

    MongoDB是文档型数据库,所以它没有关系型数据库joins 特性.但是mongoose也有自己的方法来解决两个表之间的关联问题,Mongoose就是通过populate来解决这个问题的.接下来分享 ...

  5. 给mongoose find()/findOne()查询的结果添加额外的属性

    在学习 mongoose 的时候,碰到一个需要注意的地方. 给查询结果添加额外的属性时,不能直接在这个结果对象上添加属性.原因和解决方案往下看. 假设 User 集合有一个 name 字段: cons ...

  6. [NodeJS] Mongoose Populate 基本使用

    转载自 https://blog.csdn.net/elliott_yoho/article/details/53537147 在使用 mongoose 时,想通过一个外键与另一张表建立关联时,不知该 ...

  7. mongoose 笔记

    快速启动 首先需要安装MongoDB和Node.js. 然后使用npm下载mongoose: npm install mongoose 接着我们直接在项目中引入mongoose,并且连接数据库就会在本 ...

  8. Mongo基础使用,以及在Express项目中使用Mongoose

    MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...

  9. mongoose设置unique不生效问题解决

    1.unique属于schema约束验证中的一员,他的作用主要就是让某一个字段的值具有唯一性(不能重复) 2.保持字段的唯一性使用type值:{type:String,unique:true,drop ...

最新文章

  1. visual studio spy使用实现后台按键_多种精华液应该如何叠加使用?
  2. dask想说爱你不容易
  3. HDU - 6610 Game(带修莫队)
  4. java导出表格_java怎么导出excel表格
  5. TimeSpan 用法 求离最近发表时间的函数
  6. django mysql settings
  7. html载入图片代码,TextVeiw加载HTML代码块内图片
  8. 如何重启虚拟机里的ssh服务器,通过SSH重启 vSphere 虚拟机
  9. 如何利用开源风控系统 TH-Nubula(星云)防止撞库?
  10. GP数据库(Greenplum)单机版安装
  11. Head First中文版教程
  12. ubuntu18.04配置邮件服务: postfix+dovecot+roundcube
  13. verilog实现pwm
  14. 王者荣耀英雄测试用例
  15. python为啥爬取数据会有重复_使用python爬取B站千万级数据
  16. OPC服务器软件介绍
  17. 解决小米远程管理下电脑出现ftp文件错误提示
  18. MapReduce关系代数运算——差
  19. python里的map是什么意思_map在python中什么意思
  20. win2008 R2 安装VS2003

热门文章

  1. 3分钟带你看懂巨龙信息大数据服务总线
  2. 【综合案例】原生JS实现购物商城
  3. python 生孩子朋友圈_生完宝宝后,你是怎样在朋友圈报喜的?这样发圈才真挚而深情...
  4. 震撼来袭!(USB Camera,支持同时开启多路摄像头,支持旋转、镜像)
  5. 关于笔记本操作系统32位和64位与内存大小的关系
  6. SVG —— 基于XML语法的可缩放矢量图形
  7. 效果奇特的HTML5动画,12个效果奇特的HTML5动画赏析 – 码农网
  8. 解决32位微信开发者工具黑屏
  9. 帆软报表调用python脚本_直连数据库实时更新数据,比python强大,可视化报表这么做简直牛...
  10. 高并发 限流,到底限的什么鬼 (精品长文)