mongoose 入门以及实现数据 的增、删、改、查
一、mongoose 介绍
Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。
Mongoose 有两个特点
1、通过关系型数据库的思想来设计非关系型数据库
2、基于 mongodb 驱动,简化操作
Mongoose 可提供规范
Scheme 定义数据格式的规范
以Model规范Collection
规范数据操作的Api
二、mongoose 的安装以及使用
1.安装
npm i mongoose --save
2. 引入mongoose 并连接数据库
const mongoose = require('mongoose');
// 连接方式1:无密码
mongoose.connect('mongodb://localhost/test');
// 连接方式2:有密码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,
})
三、简单例子-测试连接是否成功
例子参考自慕课nodejs博客项目
1.环境准备
创建文件夹(例mongoose/db.js),安装node包
$ npm init --yes
npm i mongodb --save
// 安装mongoose
npm i mongoose --save
2.简单的代码
const mongoose = require('mongoose');
const url = 'mongodb://localhost:27017'
const dbName = 'myblog'
mongoose.connect(`${url}/${dbName}`, {
// 配置:去掉警告信息
useUnifiedTopology: true ,
useNewUrlParser: true
})
const db = mongoose.connection;
// 错误
db.on('error', err => {
console.log('err: ', err);
})
// 成功
db.once('open', () => {
console.log('连接成功');
})
3.测试连接
node db.js
若打印连接成功则正常
四、复杂例子-mongoose增删改查
1.目录结构
创建文件, 目录结构
mongoose
db.js
models
User.js
test
user-creat.js
2.db.js 连接数据库
const mongoose = require('mongoose');
const url = 'mongodb://localhost:27017'
const dbName = 'myblog'
mongoose.connect(`${url}/${dbName}`, {
// 配置:去掉警告信息
useUnifiedTopology: true ,
useNewUrlParser: true
})
const db = mongoose.connection;
// 错误
db.on('error', err => {
console.log('err: ', err);
})
// 成功
db.once('open', () => {
console.log('连接成功');
})
module.exports = mongoose;
注意:导出mongoose。 module.exports = mongoose;
3. 准备models
使用schema定义数据格式的规范,model规范collection
例子:model/User.js
const { mongo } = require('mongoose')
// 对应 user 集合
const mongoose = require('../db')
// 用Schema 定义数据规范
const UserSchema = mongoose.Schema({
username:{
type: String,
required: true, // 必须
unique: true // 唯一,不能重复
},
password: String,
realname: String
})
// Model 对应collection
const User = mongoose.model('user', UserSchema)
module.exports = User;
4. 增删改查
1) 查
user-find.js
const User = require('../models/User')
// 自执行的异步函数
!(async() => {
// 查询
const list = await User.find()
console.log('查询: ', list);
// 查询2-模拟登录
const user = await User.find({
username: 'zhangsan3',
password: '123'
})
console.log('是否登录成功: ', user);
})()
2) 插入数据
const User = require('../models/User')
// 自执行的一步函数
!(async() => {
// 创建用户
const zhangsan3 = await User.create({
username: 'zhangsan3',
password: '123',
realname: '张三3'
})
console.log('插入: ', zhangsan3);
})()
五、复杂例子-博客的增删改查
1.目录结构
mongoose
db.js
models
Blog.js
test
blog-find.js
blog-creat.js
blog-update.js
blog-delete.js
2.db.js连接数据库
同上
3.models - Blog.js
const { mongo } = require('mongoose')
const mongoose = require('../db')
const BlogSchema = mongoose.Schema({
title:{
type: String,
required: true
},
content: String,
author: {
type: String,
required: true
}
})
const Blog = mongoose.model('blog', BlogSchema);
module.exports = Blog;
4.增删改查
1) blog-find
const Blog = require('../models/Blog')
!(async() => {
// 1.简单查询
// const list = await Blog.find({ author: 'zhangsan'}).sort({ _id: -1 })
// 2.查询:排序
// const list = await Blog.find().sort({ _id: -1 })
// 3.查询:加筛选条件
const list = await Blog.find({
// author: 'zhangsan',
title: /标题/, //模糊查询
}).sort({ _id: -1 })
console.log('list: ', list);
// 4.根据id获取单个博客
const singblog = await Blog.findById('6017ee263607e2b73854b441');
console.log('具体id的博客: ', singblog);
})()
2) blog-create
const Blog = require('../models/Blog')
!(async() => {
const blog = await Blog.create({
title: '标题6',
content: '内容内容内容内容6',
author: 'zhangsan'
})
console.log('blog: ', blog);
})()
3)blog-update
const Blog = require('../models/Blog')
!(async() => {
const res = await Blog.findOneAndUpdate(
{_id: '6017ee263607e2b73854b441' }, // 条件
{content: '标题6修改修改修改修改' }, // 条件
{
new: true // 返回修改之后的最新内容,默认为false
}
)
console.log('修改: ', res);
})()
4) blog-delete
const Blog = require('../models/Blog')
!(async() => {
const res = await Blog.findOneAndDelete({
title: '标题4',
author: 'lisi' //防止误删
})
console.log('删除: ', res);
})()