mongoose整理笔记
一:参考学习网址
npm: https://www.npmjs.com/package/mongoose
官网API:http://mongoosejs.com/docs/guide.html
二:在node中的连接
1.先要安装mongoose: npm i mongoose --save
2.如何连接:
var mongoose = require('mongoose');
//连接
mongoose.connect( ' 地址 ' ) //自己需要连接的数据库地址,如本机的test数据库,就是 mongoose.connect('mongodb://localhost/test')
var db = mongoose.connection;
//连接成功
db.on('connected', function () { console.log('Mongoose connection open to ' + DB_URL); });
//连接异常
db.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); //连接断开 db.on('disconnected', function () { console.log('Mongoose connection disconnected'); }); module.exports = mongoose;
三:关于Schema
mongoose基本由Schema , Model , query 组成;
1.Schema的作用:
来定义表数据中的字段;
和字段的类型;
和字段的一些限定,例如长度......;
和数据库的一些静态方法;
2.Schema的创建方式:
var UserSche = new mongoose.Schema( option ) ;
2.1. Schema的参数option:
这些参数的作用主要是在创建数据表之前,对立面的字段的一些控制,和一些属性的配置,如下面是基本完整的所有的参数的配置:
var schema3 = new Schema({
test: {
type: String, //类型
lowercase: true, // 总是将test的值转化为小写
uppercase: true, // 总是将test的值转化为大写
required:true, //设定是否必填
default:'star', //设定默认值
index:true, //设定索引值
unique:true, //索引值唯一
sparse:true, //是否启用稀疏索引 //一般用在LBS地理位置应用中
match:RegExp, //判断是否通过正则验证
enum:Array, //判断test值是否包含于enmu对应的数组中
min:Number, //判断对应值是否大于等于给定值
max:Number, //判断对应值是否小于等于给定值
trim:true //去除数据前后的空格
capped:1024 //限定大小最大为1024字节
validate:function,为此属性添加一个验证器函数,如demo1所示
get:function,//为这个属性定义一个定制的getter Object.defineProperty()。如demo2所示
set:function,//定义此属性的自定义设置Object.defineProperty()。如demo2所示
}
});
//var schema3 = new Schema({ haha:{ type : String } }) //这是最基本的
demo2:
//将传入的值四舍五入后存储
var numberSchema = new Schema({
integerOnly: {
type: Number,
get: v => Math.round(v),
set: v => Math.round(v),
require:true
}
});
2.2.Schema的option中的type可配置的参数:
//如果在Schema中字段不给类型的话就会,自动默认为混合类型Mixed
String //字符串类型
Number //数字类型
Date //日期类型
Boolean //布尔类型
Buffer
ObjectId
Mixed //混合类型
Array //数组类型
2.2.1.几种特殊类型的声明:
//1.ObjectId
UserSche. add ( { //schema的add方法是在之前new的基础上再添加字段
owner : mongoose.Schema.Types.ObjectId
}); /*2.Mixed:
这个是混合类型;
里面可以放置任何类型
的数据;*/ UserSchema . add ( {//第一种创建方式:
owner : { }
}); UserSchema . add ( {//第二种创建方式:
owner : mongoose.Schema.Types.Mixed
}); //3.Array:
UserSchema . add ( {//第一种创建简单数组:
owner : [ String ]
}); var moreSchema = new mongoose.Schema( {//第二种复杂类型数组创建:
email : String ,
Verified : Boolean
}); //在这里创建这个Schema来保存一些类型 UserSchema . add ( {
owner : [ moreSchema ] //把上面的Schema类型用在数组里面
});
2.3.Schema 创建静态方法
2.3.1.作用:这个静态方法可以用在Model中直接调用,需要先声明Schema实例
2.3.2.用法例子:
UserSchema.statics.findById = function( id , callback) {
this.find ( { ID : id }
};
四:关于Model
4.1.作用:Model是由Schema生成的Model;可以对数据库进行直接操作;
4.2.插入数据:
var user = mongoose.model ('user' ,UseSch); //UseSch是在前面声明的Schema var users = new user( {
username : "liu",
password : 123123,
phone : 1111111
}) ;
user.save( function ( err ,res) {
if(err) {
console.log(err);
}else{
console.log(res);
}
}); //后面可以通过query的点式操作来操作数据库,看起来更简洁
4.3更新数据:
4.3.1.普通更新,根据条件更新所有的
//Model.update( 条件 , 更新项 , 回调函数 )
var str = {'username' : 'liu'};
var upsrt = {'userpwd': '666'};
User.update(str, upsrt, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
4.3.2.通过id更新一条
Model.findByIdAndUpdate(id, [update], [options], [callback])
4.3.3.找到一条并更新
Model.findOneAndUpdate([conditions], [update], [options], [callback])
4.4.删除数据:
4.4.1.普通删除所有符合条件的
Model.remove(conditions, [callback])
4.4.2.通过id查到并且删除
Model.findByIdAndRemove(id, [options], [callback])
4.4.3.只找到第一个符合条件的并且删除
Model.findOneAndRemove(conditions, [options], [callback])
4.5.查询
4.5.1.条件查询
//条件查询:
Model.find(conditions, [fields], [options], [callback]) /*Model.find( 查询条件 , 需要展示的
字段如果是null就表示返回所有的字段 ,
对查询出来的数据进行再次筛选 , [callback])*/
4.5.1.1.一般条件查询
User.find({'name', 'liu'}, 'name email',function(err, result) {
//查询到所有这个表里面的名字是‘liu’ 的数据
//并且只展示字段name 和 email 别的不要
console.log(result) //返回包含上面两个字段的符合条件的数据 });
4.5.1.2.再筛选查询
参数3:
User.find({'name', 'liu'}, 'name email', {skip: 0, limit: 4, sort: {ID: 1}}, function(err, result) { //查询到name是‘liu’ 的前4条,用ID进行正序排序的包含name ,email的数据
console.log(result);
});
4.5.1.3.某个范围查询
User.find( { age : {$gte:21 ,$lte:26} } , function( err, result ) {
//查到user表的年龄在 21 - 26 之间的数据
console.log(result)
})
规定范围的方法还有:
$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个元素)
4.5.2.数量查询 :Model.count(conditions, [callback]) ;
4.5.3.根据id查询 : Model.findById(id, [fields], [options], [callback]) ;
4.5.4.模糊查询 : 主要是用的正则 $regex 来模糊匹配
var whereStr = {'username':{$regex:/m/i}};
User.find(whereStr, function(err, res){
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
}) //找到所有名字中带有m的数据
4.5.4.分页查询
function getByPager(){
var pageSize = 5; //一页多少条
var currentPage = 1; //当前第几页
var sort = {'logindate':-1}; //排序(按登录时间倒序)
var condition = {}; //条件
var skipnum = (currentPage - 1) * pageSize; //跳过数 User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) {
if (err) {
console.log("Error:" + err);
}
else {
console.log("Res:" + res);
}
})
}
4.5.6.去重查找 : Model.distinct(field, [conditions], [callback]) ;
4.5.7.只查一条数据 : Model.findOne(conditions, [fields], [options], [callback]) ;
五:query
点式操作:
Person.
find({
occupation: /host/,
'name.last': 'Ghost',
age: { $gt: 17, $lt: 66 },
likes: { $in: ['vaporizing', 'talking'] }
}).
limit(10).
sort({ occupation: -1 }).
select({ name: 1, occupation: 1 }).
exec(callback);
mongoose整理笔记的更多相关文章
- canvas学习之API整理笔记(二)
前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...
- xmpp整理笔记:发送图片信息和声音信息
图片和音频文件发送的基本思路就是: 先将图片转化成二进制文件,然后将二进制文件进行base64编码,编码后成字符串.在即将发送的message内添加一个子节点,节点的stringValue(节点的值) ...
- xmpp整理笔记:聊天信息的发送与显示
任何一个信息的发送都需要关注两个部分,信息的发出,和信息在界面中的显示 往期回顾: xmpp整理笔记:环境的快速配置(附安装包) http://www.cnblogs.com/dsxniubilit ...
- xmpp整理笔记:用户网络连接及好友的管理
xmpp中的用户连接模块包括用户的上线与下线信息展现,用户登录,用户的注册: 好友模块包括好友的添加,好友的删除,好友列表的展示. 在xmpp中 负责数据传输的类是xmppStream,开发的过程中, ...
- xmpp整理笔记:xmppFramework框架的导入和介绍
一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 往期回顾: xmpp整理笔记:环境的快速 ...
- jQuery整理笔记文件夹
jQuery整理笔记文件夹 jQuery整理笔记一----jQuery開始 jQuery整理笔记二----jQuery选择器整理 jQuery整理笔记三----jQuery过滤函数 jQuery整理笔 ...
- sk_buff整理笔记(两、操作函数)
承接上一:sk_buff 整理笔记(一.数据结构)这一篇要讲的是内核为sk_buff结构提供的一些操作函数. 第一.首先要讲的是sk_buff中的四大指针: 四大指针各自是:head.data.tai ...
- element-ui 组件源码分析整理笔记目录
element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...
- element-ui Carousel 走马灯源码分析整理笔记(十一)
Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...
随机推荐
- springboot之freemarker 和thymeleaf模板web开发
Spring Boot 推荐使用Thymeleaf.FreeMarker.Velocity.Groovy.Mustache等模板引擎.不建议使用JSP. 一.Spring Boot 中使用Thymel ...
- linux/videodev.h: No such file or directory错误解决方法
sudo apt-get install libv4l-dev* file yum install libv4l-dev* yum install libv4l-dev* 上面错误的问题是两个2.4以 ...
- APP手工测试01-app专项测试要点-测试、开发环境-敏捷开发
APP专项测试要点 兼容性测试 安装,卸载,升级 交叉事件 PUSH消息推送测试 性能测试 其他类型 兼容性测试 手机型号 系统版本 安卓 (版本4.4开始兼容) IOS(版本9.x开始兼容) 屏幕尺 ...
- Day6作业:计算器
嗯,稀里糊涂就居然写完了...... readme: 程序说明: 此计算器比较简单,只支持普通的加减乘除和小括号,不支持[],{},求幂之类的均不支持! 测试过的字符串: -1/2*((60-30+( ...
- java8中计算两个日期时间LocalDateTime的时间差,格式化成xx年yy月zz日aa时bb分cc秒
原则上应该适用Period来计算,因为他是专门为这种需求设计的.当时他只能计算到两个时间差的,年月日 传入参数Period.between(LocalDate,LocalDate) 这里是计算两个Lo ...
- InfluxDB+Grafana大数据监控系列之基础环境部署(一)
一.单节点环境部署 机器节点信息及 InfluxDB.Grafana 版本选择: 节点 Linux版本 部署服务 10.223.1.198 Centos 6.8 InfluxDB 1.7.7 10.2 ...
- java构造方法前加void有什么作用
构造方法前面是没有任何返回符,不能加任何返回类型,包括void.一个构造方法一旦加了void,那么这个就不是构造方法了,变成了一个普通的方法.至于你程序出现的情况,是这样的.任何一个Java类,如果你 ...
- Redis学习笔记——Redis的基本操作
之前介绍过如何在ubuntu安装Redis服务器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下来,我们在Redis上进行一些基本的操作. 所县使用命 ...
- 【Leetcode_easy】1108. Defanging an IP Address
problem 1108. Defanging an IP Address solution: class Solution { public: string defangIPaddr(string ...
- 【Leetcode_easy】657. Robot Return to Origin
problem 657. Robot Return to Origin 题意: solution1: class Solution { public: bool judgeCircle(string ...