Mongoose简单的连表查询
原文摘自我的前端博客,欢迎大家来访问
像我这篇文章所说的基于Node.js + jade + Mongoose 模仿gokk.tv,当时停止开发是因为我深深的感觉到当时想错了,应该用两个Schema,而不是一个下面又有数组来存,这样取数据是方便,当时分页相当麻烦,不能使用原生提供的limit方法。
今天看到一本书上有讲,尝试了一把,记录下来
我们实验的场景为一个班级有N多学生,先通过学生ID找到班级名称(是不是被玩腻了?)
先来将Schema定义好
ClazzSchema :
var mongoose = require('mongoose')
var ClazzSchema = new mongoose.Schema({
clazzName:String
})
//其他方法省略..
}
module.exports = ClazzSchema
StudentSchema :
var mongoose = require('mongoose')
var StudentSchema = new mongoose.Schema({
name:String,
clazzID : {
type : mongoose.Schema.ObjectId,
ref : 'Clazz'
}
})
StudentSchema.statics = {
findClazzNameByStudentId:function(studentId, callback){
return this
.findOne({_id : studentId}).populate('clazzID')
.exec(callback)
}
//其他方法省略..
}
module.exports = StudentSchema
可以看到,主需要将ClazzID设为ref到Clazz,依赖为你建立Model时的名称就可以了,要查询Clzz使用populate
下面是Model
var mongoose = require('mongoose')
var ClazzSchema = require('../schemas/clazzSchema')
var Clazz = mongoose.model('Clazz',ClazzSchema)
module.exports = Clazz
var mongoose = require('mongoose')
var StudentSchema = require('../schemas/studentSchema')
var Student = mongoose.model('Student',StudentSchema)
module.exports = Student
大同小异,着重看test.js
var mongoose = require('mongoose')
var Clazz = require('./models/clazzModel')
var Student = require('./models/studentModel')
//var db = mongoose.createConnection('localhost', 'gokk')
mongoose.connect('mongodb://localhost/test')
/*var clazz = new Clazz(
{
clazzName:'软件2班'
}
);
clazz.save(function (argument){
console.log('true');
});*/
/*var student = new Student({
name : 'hacke2',
clazzID : '542b5fcc49df6e741d8d15f5'
})
student.save(function (err){
console.log('true');
})*/
Student.findClazzNameByStudentId('542b600a683d59a80d4ee632', function (err, student){
if(err) console.log(err);
console.log(student.clazzID.clazzName);
})
之前添加了两班级:软件一班和软件二班
我们在新增hacke2时将classID设为软件2班的,查新hacke2时自动就会把关键的 Class查询到
{ _id: 542b600a683d59a80d4ee632,
name: 'hacke2',
clazzID: { _id: 542b5fcc49df6e741d8d15f5, clazzName: '软件2班', __v: 0 },
__v: 0 }
end from http://www.hacke2.cn
Mongoose简单的连表查询的更多相关文章
- Mongoose中的关联表查询 && 聚合查询
注:阅读此篇文章,需要有一定的Mongo基础.基本的不会再重复介绍. 例: 有两张表,一张是博客列表,另外一张是博客的标签表.现在我们要做两张表的插入和关联查询. 创建两张表的Schema 主表bl ...
- SpringBoot 整合 MybatisPlus (项目的创建及简单的单表查询)
添加依赖 <!--mybatis-plus的springboot支持--> <dependency> <groupId>com.baomidou</group ...
- python实现简易数据库之二——单表查询和top N实现
上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlit ...
- SQL数据查询之——单表查询
一.SQL数据查询的一般格式 数据查询是数据库的核心操作.SQL提供了SELECT语句进行数据查询,其一般格式为: SELECT [ALL | DISTINCT]<目标列表达式>[,< ...
- MySQL的select多表查询
select 语句: select 语句一般用法为: select 字段名 from tb_name where 条件 ; select 查询语句类型一般分为三种: 单表查询,多表查询,子查询 最简 ...
- C语言-MySQL单表查询(vs2013环境)
一.首先配置项目属性: 1.打开mysql的安装路径,找到include文件夹和lib文件夹 如图: 2.在vs2013中, 打开项目–> 属性 –>VC++目录 如图: 把将nclude ...
- SQL Server 的表数据简单操作(表数据查询)
--表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例: use 商品管理数据库 go ...
- MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询
MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...
- MySQL简单查询详解-单表查询
MySQL简单查询详解-单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询的执行路径 一条SQL查询语句的执行过程大致如下图所示: 1>.客户端和服务端通过my ...
随机推荐
- win10 1607 密匙
win10 1607 安装密钥 GVLK Core=YTMG3-N6DKC-DKB77-7M9GH-8HVX7 Professional=VK7JG-NPHTM-C97JM-9MPGT-3V66T E ...
- AngularJs $http 请求服务
$http $http是Angular的一个核心服务,它有利于浏览器通过XMLHttpRequest 对象或者 JSONP和远程HTTP服务器交互. $HTTP API 是基于 $q服务暴露的defe ...
- AngularJs ngHref、ngSrc、ngCopy/ngCut/ngPaste
ngHref 在Angular程序没完成改变链接上用{{hash}}方式绑定的href值的时候,当用户点击该链接会跳到一个错误的页面. 格式:ng-href=”value” value:表达式. 使用 ...
- 二项分布和Beta分布
原文为: 二项分布和Beta分布 二项分布和Beta分布 In [15]: %pylab inline import pylab as pl import numpy as np from scipy ...
- tmux(ubuntu14.04)编译过程遇到的错误
1. configure: error: "libevent not found" 解决方法: $ git clone https://github.com/libevent/li ...
- Apache Tomcat目录下各个文件夹的作用
1.bin:存放各种不同平台开启与关闭Tomcat的脚本文件. 2.lib:存tomcat与web应用的Jar包. 3.conf:存放tomcat的配置文件. 4.webapps:web应用的发布目录 ...
- IP地址、子网掩码、网关、DNS的关系
什么是IP地址所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址.按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节 ...
- BZOJ4690: Never Wait for Weights
裸带权并查集. #include<cstdio> #define N 100005 int m,i,j,s,t,u,d[N],p[N]; char k; int find(int i){ ...
- uC/OS-II配置文件
/*************************************************************************************************** ...
- MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...