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 ...
随机推荐
- 【Luogu3602】Koishi Loves Segments(贪心)
[Luogu3602]Koishi Loves Segments(贪心) 题面 洛谷 题解 离散区间之后把所有的线段挂在左端点上,从左往右扫一遍. 对于当前点的限制如果不满足显然会删掉右端点最靠右的那 ...
- html内嵌框架
html内嵌框架 <iframe>标签会创建包含另外一个html文件的内联框架(即行内框架),src属性来定义另一个html文件的引用地址,frameborder属性定义边框,scroll ...
- [TJOI2015]线性代数(最小割)
题目描述 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的转置.输出D 题解 观察上面那个式子发现,当一个bij有贡献时当 ...
- thinkphp5中__PUBLIC__的使用
在使用thinkphp5.1开发的时候遇到设置__PUBLIC__无法生效的问题.这次的版本升级有比较大的改动,很多写法已经被更改,下面说下怎么去解决这个问题. 工具/原料 phpstorm ln ...
- POJ--3259 Wormholes (SPFA判负环)
题目电波 3259 Wormholes #include<iostream> #include<cstring> #include<algorithm> #in ...
- TODO java-web相关 servlet过滤器+监听器
servlet过滤器 定义: 过滤器是小型的web组件,它负责拦截请求和响应,以便查看.提供或以某种方式操作正在客户机和服务器之间交换的数据. 与过滤器相关的servlet共包含3个简单接口:Filt ...
- MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL
创建function时 出错信息: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL ...
- linux下创建用户组与用户 只能访问指定目录的方法 以及FTP用户配置详解
VSFTPD 安装: -- 查看是否已经安装 VSftpd: rpm -qa | grep vsftp yum install -y vsftpd groupadd ftpuser #创建ftpuse ...
- C# 数据库批量插入数据之 —— SqlBulkCopy、表值参数
创建了一个用来测试的Student表: CREATE TABLE [dbo].[Student]( [ID] [int] PRIMARY KEY NOT NULL, ) NULL, ) NULL, [ ...
- django_admin用法
Django内置的admin Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.con ...