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 ... 
随机推荐
- opencv图像融合(给人脸添加一个眼镜)
			基于dlib68点人脸检测的小功能实现 图像旋转找的现成的方法,稍稍麻烦点的地方就是mask处理,虽然目的达到了,但是效果一般 import numpy as np import cv2 as cv ... 
- 「CodeForces - 50C 」Happy Farm 5 (几何)
			BUPT 2017 summer training (16) #2B 题意 有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数. 题解 这题要求严 ... 
- Min_25
			可以用来筛出一个积性函数的前缀和.这个积性函数要满足当\(x\)是质数时,\(f(x)\)可以快速求出,\(f(x^k)\)也可以快速算出. 首先我们要处理出一个\(g(x)=\sum_{x\in p ... 
- 洛谷P4581 [BJOI2014]想法(玄学算法,拓扑排序)
			洛谷题目传送门 萝卜大毒瘤 题意可以简化成这样:给一个DAG,求每个点能够从多少个入度为\(0\)的点到达(记为\(k\)). 一个随机做法:给每个入度为\(0\)的点随机一个权值,在DAG上求出每个 ... 
- python之各种装饰器的使用
			""" 装饰器,带参数的装饰器,类的装饰器 判断是否为可迭代的 from collections import Iterable print(isinstance([1, ... 
- 【dp】P1434 [SHOI2002]滑雪
			题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ... 
- bootstrap学习一
			bootstrap学习 一.css概览: 1.使用HTML5标准,<!DOCTYPE html>. 2.移动设备优先: <meta name="viewport" ... 
- 阻止 form 回车 自动提交
			问题:当form表单中只有一个input时,在input中按回车键会自动提交. 解决方案: 1.form元素上加onsubmit="return false"(推荐) 2.多个in ... 
- C++ 容器操作
			typedef struct point { int x; int y; }Point; 在声明变量的时候就可以:Point p1; 如果没有typedef, 如: struct point { in ... 
- 第三十七篇-BottomNavigationVIew底部导航的使用
			效果图: 添加底部导航和viewpaper 设置底部导航在底部 app:layout_constraintBottom_toBottomOf="parent" 新建四个fragme ... 
