mongoose 介绍

Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。

Mongoose 有两个特点:通过关系型数据库的思想来设计非关系型数据库;基于 mongodb 驱动,简化操作

官网:https://mongoosejs.com/

mongoose 的安装以及使用

第一步:初始化项目

创建一个项目文件夹,进入文件夹生成package.json文件

npm init --yes

第二步:安装mongoose

npm i mongoose --save

第三步:创建操作mongoose的js模块并且引入和连接数据库

需要先启动mongoDB服务,并且先创建一个数据库eggcms和一个users集合(表)

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

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

第四步:定义Schema

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

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

// 如果有账户密码需要采用下面的连接方式:
// mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms'); // 定义一个Schema,操作users集合
// Schema里面的对象和数据库表里面的字段需要一一对应
let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
})

第五步:创建数据模型

定义好了 Schema,接下就是生成 Model。model 是由 schema 生成的模型,可以对数据库的 操作。

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

// 如果有账户密码需要采用下面的连接方式:
// mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms'); // 定义一个Schema,操作users集合
// Schema里面的对象和数据库表里面的字段需要一一对应
let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 定义数据库模型 操作数据库
// 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
// 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
// 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
// var User = mongoose.model('User',UserSchema); // 默认会操作 users表(集合)
var User = mongoose.model('User',UserSchema,'users'); //默认会操作第三个参数配置的表 user表(集合)

第六步:操作数据库

增加数据,通过实例化User Molde 创建增加的数据,最后实例.save()

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

// 如果有账户密码需要采用下面的连接方式:
// mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms'); // 定义一个Schema,操作users集合
// Schema里面的对象和数据库表里面的字段需要一一对应
let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 定义数据库模型 操作数据库
// 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
// 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
// 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
// var User = mongoose.model('User',UserSchema); // 默认会操作 users表(集合)
let User = mongoose.model('User',UserSchema,'users'); //默认会操作第三个参数配置的表 user表(集合) // 增加数据
let u = new User({
name: '李四',
age: 23,
status: 1
})
u.save((err) => {
if (err) {
console.log(err)
return
}
console.log('增加数据成功')
})

查询users表的数据

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

// 如果有账户密码需要采用下面的连接方式:
// mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms'); // 定义一个Schema,操作users集合
// Schema里面的对象和数据库表里面的字段需要一一对应
let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 定义数据库模型 操作数据库
// 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
// 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
// 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
// var User = mongoose.model('User',UserSchema); // 默认会操作 users表(集合)
let User = mongoose.model('User',UserSchema,'users'); //默认会操作第三个参数配置的表 user表(集合) // 增加数据
let u = new User({
name: '李四',
age: 23,
status: 1
})
u.save((err) => {
if (err) {
console.log(err)
return
}
console.log('增加数据成功')
}) // 查询users表的数据
User.find({}, (err, doc) => {
if (err) {
console.log(err)
return
}
console.log(doc)
})

更新数据

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

// 如果有账户密码需要采用下面的连接方式:
// mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms'); // 定义一个Schema,操作users集合
// Schema里面的对象和数据库表里面的字段需要一一对应
let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 定义数据库模型 操作数据库
// 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
// 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
// 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
// var User = mongoose.model('User',UserSchema); // 默认会操作 users表(集合)
let User = mongoose.model('User',UserSchema,'users'); //默认会操作第三个参数配置的表 user表(集合) // 更新数据
User.updateOne({
'_id': '5cdc42953beb59420c5893c6'
}, {
'name': '王五',
'age': 11
}, (err, doc) => {
if (err) {
console.log(err)
return
}
console.log(doc)
})

删除数据

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/eggcms');

// 如果有账户密码需要采用下面的连接方式:
// mongoose.connect('mongodb://eggadmin:123456@127.0.0.1:27017/eggcms'); // 定义一个Schema,操作users集合
// Schema里面的对象和数据库表里面的字段需要一一对应
let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: Number
}) // 定义数据库模型 操作数据库
// 注意:mongoose.model 里面可以传入两个参数也可以传入三个参数,mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
// 如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
// 如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
// var User = mongoose.model('User',UserSchema); // 默认会操作 users表(集合)
let User = mongoose.model('User',UserSchema,'users'); //默认会操作第三个参数配置的表 user表(集合) // 删除数据
User.deleteOne({
'_id': '5cdc42953beb59420c5893c6'
}, (err, result) => {
if(err){
return console.log(err);
}
console.log(result)
})

mongoose 默认参数

增加数据的时候,如果不传入数据会使用默认配置的数据(在定义Schema的时候,去设置),下面增加数据的时候只写了两个参数

const mongoose = require('mongoose');

// useNewUrlParser是4.0版本之后,不写这个参数会有警告,这个属性会在url里识别验证用户所需的db,4.0前是不需要指定的
// 第三个参数添加一个回调函数,获取数据库连接是否成功
mongoose.connect('mongodb://127.0.0.1:27017/eggcms', { useNewUrlParser: true }, (err) => {
if(err){
return console.log(err);
}
console.log('数据库连接成功')
}); let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: {
type: Number,
default: 1
}
}) // 定义model操作数据库
let User = mongoose.model('User',UserSchema,'users'); // 增加数据
let u = new User({
name: '赵六',
age: 23
})
u.save((err) => {
if (err) {
console.log(err)
return
}
console.log('增加数据成功')
}) // 查询users表的数据
User.find({}, (err, doc) => {
if (err) {
console.log(err)
return
}
console.log(doc)
})

mongoose 模块化

在项目中操作数据库的文件夹中,新建一个文件夹model,并且创建一个db.js文件用于连接数据库,并且暴露出来即可

const mongoose = require('mongoose');

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

接下来定义子模块,比如操作users集合,那么就在model中创建一个users.js,并且将操作模型暴露出去

let mongoose = require('./db')

let UserSchema = mongoose.Schema({
name: String,
age: Number,
status: {
type: Number,
default: 1
}
}) // 定义model操作数据库
let UserModel = mongoose.model('User',UserSchema,'users'); module.exports = UserModel

然后再app.js中如果需要操作那个集合就引入哪个集合的操作模型,然后进行数据库操作

let UserModel = require('./model/users')

// 增加数据
let u = new UserModel({
name: '黄中国',
age: 23
})
u.save((err) => {
if (err) {
console.log(err)
return
}
console.log('增加数据成功') // 查询users表的数据
UserModel.find({}, (err, doc) => {
if (err) {
console.log(err)
return
}
console.log(doc)
})
})

性能测试

console.time('user');
let UserModel = require('./model/users')
console.timeEnd('user'); // 假设还有一个模块,引入user的时候,已经连接了数据库,这里第二次引入别的模块不会在连接数据库,直接可以使用
console.time('news');
let UserModel = require('./model/news')
console.timeEnd('');

Mongoose 入门以及实现数据的增、删、改、查的更多相关文章

  1. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  2. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  3. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  6. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  7. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  8. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

  9. MongoDB增 删 改 查

    增 增加单篇文档 > db.stu.insert({sn:'001', name:'lisi'}) WriteResult({ "nInserted" : 1 }) > ...

随机推荐

  1. 指针 vs 引用 (2)

    这波要针对上篇分析里 标红的问题(成员变量用 T,T&啥情况)继续思考, 要学习以下材料: 1. 知乎上:用指针还是引用 2. StackOverflow上的相关问题 https://stac ...

  2. 一.B/S架构和C/S架构

    1.B/S架构 Browser-Server,  浏览器和服务器架构.包含客户端浏览器.web应用服务器.数据库服务器的软件系统.用户只需要一个浏览器就可以访问服务.系统更新的时候,只需要更新服务端, ...

  3. Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法

    Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法 一丶ORM常用字段 ...

  4. Java程序优化细节

    1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:    1).控制资源的使用,通过线程同 ...

  5. Beego 学习笔记15:布局页面

    页面布局 1>     一个html页面由:head部分,body部分,内部css,内部js,外联css,外联的js这几部分组成.因此,一个布局文件也就需要针对这些进行拆分. 2>     ...

  6. 5.2 odex文件

    odex是OptimizedDEX的缩写,是优化过的dex文件 odex两种存在方式: 1. 从apk程序中提取,和apk文件放在一起,后缀 odex,此类文件多是AndroidRom系统文件 2.  ...

  7. free - 显示系统内存信息

    free - Display amount of free and used memory in the system 显示系统中空闲和已使用内存的数量 格式: free [options] opti ...

  8. LINUX基础学习之基础命令(2)--2019-11-18

    1.ls  :命令(list):列出指定目录下的内容 用法:ls [选项] [文件名...] [root@Redhat-7-43 ~]# which ls alias ls='ls --color=a ...

  9. php备忘录模式(memento pattern)

    晚上刷起来. <?php /* The memento pattern provides the object restore functionality. Implementation is ...

  10. 洛谷P3069 [USACO13JAN]牛的阵容Cow Lineup(尺取法)

    思路 考虑比较朴素的解法,枚举每个长度为\(k+1\)的区间,然后统计区间中出现次数最多的颜色.这样的话复杂度为\(O(n*k)\)的,显然不行. 观察到统计每个区间中出现次数最多的颜色中,可以只用看 ...