Mongoose笔记
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具
mongoose是针对mongoDB操作的一个对象模型库,封装了mongoDB对文档的、增删改查等方法
使用Koa连接mongoose数据库:
1、安装
npm install mongoose --save-dev
2、引包
const mongoose = require('mongoose');
3、通过connect进行数据库连接
mongoose.connect('mongodb://localhost:27017')
4、使用connection监听连接状态(是否成功)
connection是mongoose模块的默认引用,返回一个Connetion对象
mongoose.connection.on('connected',(err)=>{
if(err){
console.log('数据库连接失败');
}else{
console.log('数据库连接成功');
}
})
数据库的一些连接状态
连接成功
mongoose.connection.on('connected', function(){});
连接异常
mongoose.connection.on('error', function (err){});
连接断开
mongoose.connection.on('disconnected', function(){});
schema
schema可以理解为是建模,是定义数据的一种格式(数据属性模型)
在Mongoose 中,所有数据都由一个 Schema 开始创建。schema不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现
每个schema会映射到mongodb中的一个collection
let PersonSchema = new mongoose.Schema({
name:String,
age:Number
})
Schema中数据类型:
String 字符串类型
Number 数字类型
Date 日期类型
Boolean 布尔类型
ObjectId 主键,一种特殊的重要类型
Array 集合类型
Mixed 混合类型
model
定义好了Schema,然后生成Model,model是我们构造document的Class
model是由schema生成的模型,可以对数据库的操作
var mongoose=require("mongoose");
mongoose.connect("mongodb://localhost/test");
var animalSchema=new mongoose.Schema({
name:String,
type:String
});
//Schema定义的方法,model的实例可以直接使用
var Animal=mongoose.model("Animal",animalSchema);//第一个参数是名字,第二个参数是schema名称
添加 save()
var Animal=mongoose.model("Animal",animalSchema);
var dog=new Animal({
name:"小狗",
type:"dog"
});
dog.save();
等待这个异步操作完成后再往下执行,可以在save前面加上await
栗子:
router.get('/classInfo',async(ctx)=>{
let ojs = {};
let obj = ctx.request.query;
switch (obj.act){
case 'add' :
let add = new ClassInfo({
name:obj.name,
id:obj.id,
sex:obj.sex,
})
await add.save();
ojs.code = 1;
ojs.msg = '添加成功';
break
}
ctx.body = ojs;
})
查询 find
User.find({'user' : 'ws'}, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
第二个字段可以设置要查询的字段,1表示输出该字段,0表示不输出该字段
find可以放在外面使用,也可以放在里面使用
栗子:
router.get('/classInfo',async(ctx)=>{
let ojs = {};
let obj = ctx.request.query;
switch (obj.act){
case 'search' :
let {id,name,sex} = obj;
try{
let arr = await ClassInfo.find(JSON.parse(JSON.stringify(
{
id,
name,
sex
}
)));
ojs.code = 0;
ojs.msg = '查询成功';
ojs.data = arr;
}catch(err){
ojs.code = 1;
ojs.msg = '查询失败';
ojs.data = [];
}
break;
}
ctx.body = ojs;
})
条件查询中常用属性
/*
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素
*/
Mongoose笔记的更多相关文章
- Koa2+mongoose
为什么选择Koa koa是Express框架同个公司的产品,是开发者在node7.0版本之后使用promise的api把express再次封装了一次,起名Koa,==Koa=Express+Promi ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html
- MongoDB学习笔记二- Mongoose
MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...
- Mongoose学习笔记
#名词解释: Schema 一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力 Model 由Schema生成的模型,具有抽象属性和行为,能够操作数据库 Entity 由Model创建的实体 ...
- mongoose学习笔记1--基础知识1
今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢? MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 ...
- Mongoose简单学习笔记
1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Mo ...
- Nodejs学习笔记(十四)— Mongoose介绍和入门
目录 简介 mongoose安装 连接字符串 Schema Model 常用数据库操作 插入 更新 删除 条件查询 数量查询 根据_id查询 模糊查询 分页查询 其它操作 写在之后... 简介 Mon ...
- mongoose学习笔记3--简单查询1
简述 查询就是返回一个集合中的文档的子集 Mongoose 模型提供了 find. findOne. findById 三种方法用于文档查询. 为了方便后面课程的有效学习,我们先添加一些测试数据. T ...
随机推荐
- 执行sql脚本保留操作日志
需求场景,操作数据库场景较多,无专业dba,腾讯云mysql虽然提供了类似于phpmyadmin的管理后台,但是操作卡,效率低 #!/usr/bin CDATE=`date +%Y%m%d-%H%M% ...
- ssh-keygen适用场景与rsync使用id_rsa技巧
ssh-keygen工具可以实现免密码登录服务器可参考之前的blog:http://www.cnblogs.com/Mrhuangrui/p/4565333.html写的比较粗糙 原理说明使用ssh- ...
- Shell 字符截取命令 awk
awk命令# awk '条件1{动作1} 条件2{动作2}….' 文件名一般使用关系表达式作为条件动作:1.格式化输出 2.流程控制语句 处理cut命令无法截取空格的列 例子:截取出磁盘使用率 df ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- [USACO08DEC]在农场万圣节Trick or Treat on the Farm【Tarja缩点+dfs】
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- IncDec Sequence(差分)
题意:给定一个序列,可以对一个区间进行加1或减1的操作,问最少需要多少次可以将序列的值一样. Solution 我们将序列差分,得到一个差分数组. 对于每一个区间操作,我们可以把它转化为在查分数组上某 ...
- mysql 单表卡死
由于单表数据量过大导致的更新操作处于卡死状态,无法打开也无法修改. 此时需要命令行模式连接数据库,注意点:此处连接需要相同的账号 1. $ SHOW PROCESSLIST; 2. $ kill 37 ...
- 各种“地”—— 各种“GND”
GND,指的是电线接地端的简写.代表地线或0线. 电路图上和电路板上的GND(Ground)代表地线或0线.GND就是公共端的意思,也可以说是地,但这个地并不是真正意义上的地.是出于应用而假设的一个地 ...
- 20165223《Java程序设计》第七周Java学习总结
教材学习内容总结 第11章-JDBC与MySQL数据库 要点 MySQL数据库管理系统 连接MySQL数据库 查询操作(基础) 更新.添加.删除(基础) 预处理语句(重点) 通用查询(难点) 事务 笔 ...
- MongoDB存储引擎选择
MongoDB存储引擎选择 MongoDB存储引擎构架 插件式存储引擎, MongoDB 3.0引入了插件式存储引擎API,为第三方的存储引擎厂商加入MongoDB提供了方便,这一变化无疑参考了MyS ...