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笔记的更多相关文章

  1. Koa2+mongoose

    为什么选择Koa koa是Express框架同个公司的产品,是开发者在node7.0版本之后使用promise的api把express再次封装了一次,起名Koa,==Koa=Express+Promi ...

  2. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  3. 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html

  4. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  5. Mongoose学习笔记

    #名词解释: Schema 一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力 Model 由Schema生成的模型,具有抽象属性和行为,能够操作数据库 Entity 由Model创建的实体 ...

  6. mongoose学习笔记1--基础知识1

    今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢? MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 ...

  7. Mongoose简单学习笔记

    1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Mo ...

  8. Nodejs学习笔记(十四)— Mongoose介绍和入门

    目录 简介 mongoose安装 连接字符串 Schema Model 常用数据库操作 插入 更新 删除 条件查询 数量查询 根据_id查询 模糊查询 分页查询 其它操作 写在之后... 简介 Mon ...

  9. mongoose学习笔记3--简单查询1

    简述 查询就是返回一个集合中的文档的子集 Mongoose 模型提供了 find. findOne. findById 三种方法用于文档查询. 为了方便后面课程的有效学习,我们先添加一些测试数据. T ...

随机推荐

  1. 南理第八届校赛同步赛-C count_prime//容斥原理

    大致思路就是先求出n的质因数假设是a1-an,然后在1-a的区间里面查找至少能整除{a1,a2...an}中一个元素的数有多少个,对1-b也做相同的处理,而找出来的元素肯定是与n不互质的,那么把区间的 ...

  2. ElasticSearch5.4.1 搜索引擎搭建文档

    安装配置JDK环境JDK安装(不能安装JRE)JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-download ...

  3. 【BZOJ3167】[HEOI2013]SAO(动态规划)

    [BZOJ3167][HEOI2013]SAO(动态规划) 题面 BZOJ 洛谷 题解 显然限制条件是一个\(DAG\)(不考虑边的方向的话就是一棵树了). 那么考虑树型\(dp\),设\(f[i][ ...

  4. 前端开发环境webstorm搭建

    1. 下载node.js https://nodejs.org/en/ 2. 安装 webpack 用管理员开个命令行 (mac: open terminal) npm install webpack ...

  5. 构建DHCP服务

    --------------------DHCP 配置-------------------# yum install dhcp -y# vim /etc/dhcp/dhcpd.conf# cp /u ...

  6. 编写高质量代码:改善Java程序的151个建议 --[52~64]

    编写高质量代码:改善Java程序的151个建议 --[52~64] 推荐使用String直接量赋值 Java为了避免在一个系统中大量产生String对象(为什么会大量产生,因为String字符串是程序 ...

  7. A1132. Cut Integer

    Cutting an integer means to cut a K digits lone integer Z into two integers of (K/2) digits long int ...

  8. UOJ176 新年的繁荣

    题目链接 Boruvka生成树算法 \(Boruvka\)算法就是先把每个点看作一个联通块,然后不断在联通块之间找最优的边进行合并.因为每次联通块的数量最少缩小一半.所以合并次数是\(log\)的 先 ...

  9. Mysql 远程连接服务器

    #授权外部访问 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; #清空mysql缓存 ...

  10. FindExecutable:查找与一个指定文件关联在一起的程序的文件名

    百度百科:http://baike.baidu.com/view/1285880.htm ------------------------------------------------------- ...