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. ViewHolder模式的简洁写法

    大家通常怎么写ViewHolder呢? ViewHolder holder = null; if(convertView == null){ convertView = mInflater.infla ...

  2. 【Luogu3602】Koishi Loves Segments(贪心)

    [Luogu3602]Koishi Loves Segments(贪心) 题面 洛谷 题解 离散区间之后把所有的线段挂在左端点上,从左往右扫一遍. 对于当前点的限制如果不满足显然会删掉右端点最靠右的那 ...

  3. asp.net处理事件

    从来不用也从来不研究这事件.但为了写那种CGI式的接口不得已研究一下. 环境  W10 VS2017 测试方法:写一个实现IHttpModule接口的类,在Init方法中加载所有事件然后打出日志,看看 ...

  4. Linux下设置VSCode为默认的文本编辑器

    解决方法 执行一下命令 xdg xdg-mime default code.desktop text/plain Debian alternatives system sudo update-alte ...

  5. uoj#80 二分图最大权匹配

    题意:给定二分图,有边权,求最大边权匹配.边权非负. 解:KM算法求解最大权完备匹配. 完备匹配就是点数少的那一边每个点都有匹配. 为了让完备匹配与最大权匹配等价,我们添加若干条0边使之成为完全二分图 ...

  6. c# WebApi之身份验证:Basic基础认证

    为什么需要身份认证 身份认证是为了提高接口访问的安全性,如果没有身份验证,那么任何匿名用户只要知道服务器的url,就可以随意访问服务器,从而访问或者操作数据库,这会是很恐怖的事. 什么是Basic基础 ...

  7. 都是分号惹的祸 ORA-00911

    使用JMeter连接oracle数据库,访问JDBC 请求,执行结果提示:ORA-00911: ??Ч??? 意思为无效的字符错误 说明了在执行的的SQL语句中出现了无效字符,所以在AQL语句无法通过 ...

  8. django模板中使用JQ代码实现瀑布流显示效果

    settings中的配置不再详细说明 一.路由代码 from django.contrib import admin from django.conf.urls import url from app ...

  9. Idea2017.3.5+SpringBoot--热部署

    首先建立工程的时候要选择DevTools: 然后File----Settings 然后 点击OK,然后Ctrl+Alt+Shift+/ 当当当当!!出来下面这个,点击Registry 找到这一项,勾选 ...

  10. Explicit Constructors(显式构造函数)

    按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // ...