3.1 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);
})()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值