一、mongoose介绍

Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。 Mongoose

是 NodeJS 的驱动, 不能作为其他语言的驱动。

Mongoose 有两个特点:

1、 通过关系型数据库的思想来设计非关系型数据库
2、 基于 mongodb 驱动, 简化操作

二、mongoose的安装以及使用

1.安装

npm/cnpm mongoose --save

2.引入mongoose并连接数据库

  1. const mongoose = require('mongoose');
  2. mongoose.connect('mongodb://localhost/test');
  3. 如果有账户密码需要采用下面的连接方式:
  4. mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms');

3.定义Schema

数据库中的 Schema, 为数据库对象的集合。 schema 是 mongoose 里会用到的一种数据模式,
可以理解为表结构的定义; 每个 schema 会映射到 mongodb 中的一个 collection, 它不具备
操作数据库的能力

  1. var UserSchema=mongoose.Schema({
  2. name: String,
  3. age:Number,
  4. status:'number'
  5. })

4.创建数据模型

model 是由 schema 生成的模型, 可以对数据库的操作。

注意: mongoose.model 里面可以传入两个参数也可以传入三个参数

mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema)

传两个参数,默认会和模型名称相同的复数的集合建立连接,例如模型名称为"User",则会默认操作users这个集合

var User=mongoose.model('User', UserSchema);

mongoose.model(参数 1:模型名称(首字母大写) , 参数 2:Schema, 参数 3:数据库集合名称)

传三个参数,会和第三个参数的集合建立连接,操作第三个参数的集合

var User=mongoose.model('User', UserSchema,'users');
5.查找数据

  1. User.find({},function(err,docs){
  2.   if(err){
  3.     console.log(err);
  4.     return;
  5.   }
      console.log(docs);
  6. })

6.增加数据

  1. var u=new User({ //实例化模型 传入增加的数据
  2.   name:'lisi2222333',
  3.   age:20,
  4.   status:true
  5. })
  1. u.save(function(err,docs){
  2.   if(err){
  3.     console.log(err);
  4.     return;
  5.   }
      console.log(docs);
  6. })

7.修改数据

  1. User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) {
  2.   if(err){
  3.     console.log(err);
  4.     return;
  5.   }
      console.log('成功')
  6. });

8.删除数据

  1. User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function (err) {
  2.   if (err) {
  3.     console.log(err);
  4.     return;
  5.   }
      // deleted at most one tank document
  6.   console.log('成功');
  7. });

9.保存成功查找

  1. var u=new User({
  2.   name:'lisi2222333',
  3.   age:20,
  4.   status:true //类型转换
  5. })
  6. u.save(function(err,docs){
  7.   if(err){
  8.     console.log(err);
  9.     return;
  10.   }
      //console.log(docs);
  11.   User.find({},function(err,docs){
  12.   if(err){
  13.     console.log(err);
  14.     return;
  15.   }
      console.log(docs);
  16.   })
  17. });

三、默认参数

在定义schema时,设置默认参数

  1. var UserSchema=mongoose.Schema({
  2. name:String,
  3. age:Number,
  4. status:{
  5. type:Number,
  6. default:1 //默认为1
  7. }
  8. })

四、模块化

1.先创建数据库连接模块moongoose

  1. //连接数据库
  2.  
  3. var mongoose=require('mongoose');
  4.  
  5. //useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。
  6.  
  7. mongoose.connect('mongodb://127.0.0.1:27017/eggcms',{ useNewUrlParser: true },function(err){
  8. if(err){
  9.  
  10. console.log(err);
  11. return;
  12. }
  13. console.log('数据库连接成功')
  14. });
  15.  
  16. module.exports=mongoose; //输出mongoose

2.创建user模块

  1. var mongoose=require('./db.js');
  2.  
  3. var UserSchema=mongoose.Schema({
  4. name:String,
  5. age:Number,
  6. status:{
  7. type:Number,
  8. default:1
  9. }
  10. })
  11.  
  12. module.exports=mongoose.model('User',UserSchema,'user');

3.创建news模块

  1. var mongoose=require('./db.js');
  2.  
  3. var NewsSchema=mongoose.Schema({
  4. title:"string",
  5. author:String,
  6. pic:String,
  7. content:String,
  8. status:{
  9.  
  10. type:Number,
  11. default:1
  12.  
  13. }
  14. })
  15.  
  16. module.exports=mongoose.model('News',NewsSchema,'news');

4.使用模块

  1. var UserModel=require('./model/user.js');
  2.  
  3. var NewsModel=require('./model/news.js');
  4.  
  5. var user=new UserModel({
  6.  
  7. name:"李四666",
  8. age:40
  9. })
  10.  
  11. user.save(function(err){
  12. if(err){
  13.  
  14. console.log(err);
  15. return;
  16. }
  17. //获取user表的数据
  18.  
  19. UserModel.find({},function(err,docs){
  20. if(err){
  21.  
  22. console.log(err);
  23. return;
  24. }
  25. console.log(docs);
  26. })
  27. })
  28. // NewsModel.find({},function(err,docs){
  29.  
  30. // if(err){
  31.  
  32. // console.log(err);
  33. // return;
  34. // }
  35. // console.log(docs);
  36. // })

五、模块性能

多个模块,不会多次连接数据库,只会在引入第一个模块时连接数据库

可以通过以下代码测试

  1. console.time('user');
  2.  
  3. var UserModel=require('./model/user.js');
  4.  
  5. console.timeEnd('user');
  6.  
  7. console.time('news');
  8. var NewsModel=require('./model/news.js');
  9.  
  10. console.timeEnd('news');

结果是:第一次时间大于第二次

MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化的更多相关文章

  1. MongoDB学习总结(二) —— 基本操作命令(增删改查)

    上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...

  2. 2. MongoDB基本操作 —— 用Mongo.exe操作数据库增删改查

    一.开篇 传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象 ...

  3. mongodb 数据库 增删改查

    mongodb    数据库      增删改查 增: // 引入express 模块 var express = require('express'); // 路由var router = expr ...

  4. Android(java)学习笔记193:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1.首先项目图: 2.这里的布局文件activity_main.xml: <LinearLayout xmlns:android ...

  5. 数据库学习之数据库增删改查(另外解决Mysql在linux下不能插入中文的问题)(二)

    数据库增删改查 增加 首先我们创建一个数据库user,然后创建一张表employee create table employee( id int primary key auto_increment, ...

  6. Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)

    接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...

  7. (转)SQLite数据库增删改查操作

    原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...

  8. Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2.0高级框架数据库增删改查的一些操作 --------------------------- ...

  9. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  10. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

随机推荐

  1. x86和i386

    x86: 1 9 7 8年6月,I n t e l公司推出了8 0 8 6,一个1 6位微处理器,它可访问的存储空间达到1 M B. Intel x86家族继续发展,1 9 8 5年出现了3 2位的3 ...

  2. 原创:E325: ATTENTION vim超完整超给力的问题与解决方法

    又到了老葵花哥哥开课的时间 这是给大家提供一个企业常见的错误 我相信大家生活还编程中会长期使用接触这个错误 这里我们经常用的两个选项 (E)dit any way 编辑原来的文件,忽略刚刚做的修改 ( ...

  3. PHP一句话后门过狗姿势万千之传输层加工

    既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令. 当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实 ...

  4. Comparator.comparing比较排序

    使用外部比较器Comparator进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一个比较器来进行排序.Comparator接口同样也是一个函数式 ...

  5. 20针,14针,10针JTAG引脚对应关系

    J-Link是常用的调试工具,用于程序的调试和下载.常用的J-Link的的接口有很多种,常见的有20针,14针和10针. J-Link可以使用JTAG方式下载调试程序,也可以使用SWD方式.从引脚方面 ...

  6. 解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号

    解决VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 在设置中把"vetur.format.defaultFormatter.js": " ...

  7. Microsoft Windows Server

    Microsoft Windows Server Microsoft Windows Microsoft Windows 是微软推出的个人版操作系统: Microsoft Windows Server ...

  8. Word转html并移植到web项目

    1.打开对应word文件 建议使用web视图查看文档 这样可以提前预览转转成html样式 2.如果有图片修改图片大小及格式 在web视图下,把图片调制适当大小,不然导出的html可能图片较小 3.点击 ...

  9. mysql时间的处理

    mysql中格式化时间为: 1,DATE_FORMAT(APPLYDATE,'%Y-%m-%d %H:%i:%S') AS APPLYDATE 2,DATE_FORMAT(CHKSIGNDATE, ' ...

  10. spring注解开发-容器创建全过程(源码)

    1.Spring容器的创建会经历refresh()方法[创建刷新](以AnnotationConfigApplicationContext为例) public AnnotationConfigAppl ...