一、mongoose介绍

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

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

Mongoose 有两个特点:

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

二、mongoose的安装以及使用

1.安装

npm/cnpm mongoose --save

2.引入mongoose并连接数据库

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

3.定义Schema

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

var UserSchema=mongoose.Schema({
name: String,
age:Number,
status:'number'
})

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.查找数据

User.find({},function(err,docs){
  if(err){
    console.log(err);
    return;
  }
  console.log(docs);
})

6.增加数据

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

7.修改数据

User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) {
  if(err){
    console.log(err);
    return;
  }
  console.log('成功')
});

8.删除数据

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

9.保存成功查找

var u=new User({
  name:'lisi2222333',
  age:20,
  status:true //类型转换
})
u.save(function(err,docs){
  if(err){
    console.log(err);
    return;
  }
  //console.log(docs);
  User.find({},function(err,docs){
  if(err){
    console.log(err);
    return;
  }
  console.log(docs);
  })
});

三、默认参数

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

var UserSchema=mongoose.Schema({
name:String,
age:Number,
status:{
type:Number,
default:1 //默认为1
}
})

四、模块化

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

//连接数据库

var mongoose=require('mongoose');

//useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。

mongoose.connect('mongodb://127.0.0.1:27017/eggcms',{ useNewUrlParser: true },function(err){
if(err){ console.log(err);
return;
}
console.log('数据库连接成功')
}); module.exports=mongoose; //输出mongoose

2.创建user模块

var mongoose=require('./db.js');

var UserSchema=mongoose.Schema({
name:String,
age:Number,
status:{
type:Number,
default:1
}
}) module.exports=mongoose.model('User',UserSchema,'user');

3.创建news模块

var mongoose=require('./db.js');

var NewsSchema=mongoose.Schema({
title:"string",
author:String,
pic:String,
content:String,
status:{ type:Number,
default:1 }
}) module.exports=mongoose.model('News',NewsSchema,'news');

4.使用模块

var UserModel=require('./model/user.js');

var NewsModel=require('./model/news.js');

var user=new UserModel({

    name:"李四666",
age:40
}) user.save(function(err){
if(err){ console.log(err);
return;
}
//获取user表的数据 UserModel.find({},function(err,docs){
if(err){ console.log(err);
return;
}
console.log(docs);
})
})
// NewsModel.find({},function(err,docs){ // if(err){ // console.log(err);
// return;
// }
// console.log(docs);
// })

五、模块性能

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

可以通过以下代码测试

console.time('user');

var UserModel=require('./model/user.js');

console.timeEnd('user');

console.time('news');
var NewsModel=require('./model/news.js'); 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. elasticsearch httpclient认证机制

    最近公司单位搬迁,所有的服务都停止了,我负责的elasticsearch不知道怎么回事,一直不能运行呢,因此,我一直在负责调试工作.经过两天的调试工作,我发现新的服务器增加了httpclient认证机 ...

  2. MongoDB最简单的入门教程之一 环境搭建

    MongoDB是近年来非常流行的一个介于关系数据库和非关系数据库之间的解决方案,特别广泛地应用于国内很多互联网公司,是非关系数据库当中功能最丰富,最像关系数据库的. MongoDB支持的数据结构非常松 ...

  3. windows常用bat脚本

    windows常用bat脚本 https://blog.csdn.net/longyan_csc/article/details/78737722 Windows_批处理+任务计划实现文件夹定时备份 ...

  4. diff - 找出两个文件的不同点

    总览 diff [选项] 源文件 目标文件 描述 在最简单的情况是, diff 比较两个文件的内容 (源文件 和 目标文件). 文件名可以是 - 由标准输入设备读入的文本. 作为特别的情况是, dif ...

  5. js 时间戳 随机数 new Date().getTime()

    一:时间转时间戳:javascript获得时间戳的方法有四种,都是通过实例化时间对象 new Date() 来进一步获取当前的时间戳 1.var timestamp1 = Date.parse(new ...

  6. lodash中文说明文档

    lodash中文说明文档 https://www.css88.com/doc/lodash/

  7. DFS || HDU 2181

    题意:一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. 前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每 ...

  8. sql数据表的设计思路

    好的表结构分的比较细致,个人理解大概主要分为主表.明细.历史记录表.中间表,辅助表结构应该分为:类型表.状态表.统计表.统计明细表等.为了一个功能加那么多表实在是多余,如果写一个非常复杂的业务逻辑还是 ...

  9. Spring AOP 详细介绍

    一.理解 “面向切面编程” 面向切面编程(Aspect Oriented Programming,AOP)是软件编程思想发展到一定阶段的产物,是对面向对象编程(Object Oriented Prog ...

  10. Python旅途——文件操作

    Python--文件操作 1.理解文件操作 可能有的时候有人会在想为什么要对文件进行操作,无论对于文件还是网络之间的交互,我们都是建立在数据之上的,如果我们没有数据,那么很多的事情也就不能够成立,比如 ...