nodejs中的Mysql与mongodb学习笔记

nodejs中的Mysql

Mysql介绍

  • web server 最流行的关系型数据库
  • 下载地址
  • 安装 navicat premium
  • mysql -u root -p密码
  • show databases; 显示所有数据库

数据库操作(增删改查)

use myTest;
show tables;

-- 插入
insert into users(usernames,`password`,realname) values ('lisi','123','李四');

-- 查询
select * from users;
select id username from users;
-- 查询不等于
select * from users where username <> 'zhangsan'
select * from users where username='zhangsan' and `password` = '123';
-- 模糊查询
select * from users where username like '%zhang%' or `password` = '123';

-- 排序正序
select * from users where username like '%zhang%' order by id;
-- 排序倒序
select * from users where username like '%zhang%' order by id desc;

-- 更新 将username为lisi的realname改为李四2
SET SQL_SAFE_UPDATES = 0;
updata users set realname='李四2' where username='lisi';

-- 删除 一般不用
delete from users where username='lisi';

通过Nodejs操作Mysql

  1. npm i mysql --save
const mysql = require('mysql')

// 创建链接对象
const con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '密码',
    port: '3306',
    database: 'myblog'
})

// 开始连接
con.connect()

// 执行 sql 语句
const sql = `insert into blogs (title, content, createtime, author) values ('标题C', '内容C',1546871704408, 'zhangsan')`
con.query(sql, (err, result) => {
    if (err) {
        console.error(err)
        return
    }
    console.log(result)
})

// 关闭连接
con.end()

nodejs中的Mongodb

  • Mysql 是以表格形式存储数据
  • Redis 以key-value 形式存储数据
  • Mongodb以文档形式存储数据,格式像JSON

Mongodb使用

  • 创建一个数据库(database)
  • 创建集合(collection)
  • 文档(document)的增删改查

mongodb连接nodejs

  • npm i mongodb --save

使用mongodb操作

const MongoClient = require('mongodb').MongoClient

const url = 'mongodb://localhost:27017'
const dbName = 'myblog'

MongoClient.connect(
    url,
    {
        // 配置(取消警告提示)
        useUnifiedTopology: true
    },
    (err, client) => {
        if (err) {
            console.error('mongodb connect error', err)
            return
        }

        // 没有报错,说明连接成功
        console.log('mongodb connect success')

        // 切换到数据库(类似控制台 `use myblog`)
        const db = client.db(dbName)

        // 关闭连接
        client.close()
    }
)

使用mongodb增删改查

const MongoClient = require('mongodb').MongoClient

const url = 'mongodb://localhost:27017'
const dbName = 'myblog'

MongoClient.connect(
    url,
    {
        // 配置
        useUnifiedTopology: true
    },
    (err, client) => {
        if (err) {
            console.error('mongodb connect error', err)
            return
        }

        // 没有报错,说明连接成功
        console.log('mongodb connect success')

        // 切换到数据库(控制台 `use myblog`)
        const db = client.db(dbName)

        // 使用集合
        const usersCollection = db.collection('users')

        // 新增
        usersCollection.insertOne({
            username: 'shuangyue',
            password: 'abc',
            realname: '双越'
        }, (err, result) => {
            if (err) {
                console.error('users insert error', err)
                return
            }
            console.log(result)

            // 关闭连接
            client.close()
        })

        // 修改单个
        usersCollection.updateOne(
            { username: 'zhangsan' }, // 查询条件
            { $set: { realname: '张三A' } }, // 修改的内容,注意有 $set
            (err, result) => {
                if (err) {
                    console.error('users update error', err)
                    return
                }
                console.log(result)

                // 关闭连接
                client.close()
            }
        )

        // 删除一个
        usersCollection.deleteOne(
            { a: 101 },
            (err, result) => {
                if (err) {
                    console.error('users delete error', err)
                    return
                }
                console.log(result)

                // 关闭连接
                client.close()
            }
        )

        // 查询
        usersCollection.find({
            username: 'zhangsan',
            password: '123'
        }).toArray((err, result) => {
            if (err) {
                console.error('users find error', err)
                return
            }
            console.log(result)

            // 关闭连接
            client.close()
        })
    }
)


上面的不常用比较底层,下面使用更高级的mongoose

mongodb 数据格式过于灵活

  • 可以插入任何数据,不受限制
  • 实际项目开发时,要有数据格式的规范

mongoose可提供规范

  • Schema定义数据格式的规范
  • 以Model规范Collection
  • 规范数据操作的API
  • npm i mongoose --save
// 连接数据库

const mongoose = require('mongoose')

const url = 'mongodb://localhost:27017'
const dbName = 'myblog'

mongoose.set('useFindAndModify', false)  // 如果提示此处出错,则删掉

mongoose.connect(`${url}/${dbName}`, {
    // 避免警告配置
    useNewUrlParser: true,
    useUnifiedTopology: true
})

const db = mongoose.connection

// 发生错误
db.on('error', err => {
    console.error(err)
})

// 连接成功
db.once('open', () => {
    console.log('mongoose connect success…')
})
module.exports = 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

// 操作数据库1

const User = require('../models/User')

// 自执行的异步函数
!(async () => {

    // 创建用户(增)
    const zhangsan = await User.create({
        username: 'zhangsan',
        password: '123',
        realname: '张三'
    })

    // 查询
    const list = await User.find()
    console.log(list)

    // 模拟登录
    const zhangsan = await User.find({
        username: 'zhangsan',
        password: '123'
    })
    console.log(zhangsan)
})()

// 操作数据库2

const Blog = require('../models/Blog')

!(async () => {

    // 新建博客
    const blog1 = await Blog.create({
        title: '标题3',
        content: '内容3',
        author: 'shuangyue'
    })
    console.log(blog1)

    // 获取列表
    const list = await Blog.find({
        // author: 'zhangsan'
        title: /A/ // 正则表达式,模糊查询
    }).sort({ _id: -1 })
    console.log(list)

    // 根据 id 获取单个博客
    const blog3 = await Blog.findById('5f4cc1824e9b73583b69b404')
    console.log(blog3)

    // 修改博客
    const res = await Blog.findOneAndUpdate(
        { _id: '5f4cc1824e9b73583b69b404' }, // 条件
        { content: '内容3内容3内容3' },
        {
            new: true // 返回修改之后的最新的内容,默认为 false
        }
    )
    console.log(res)

    // 删除
    const res = await Blog.findOneAndDelete({
        _id: '5f4cc1824e9b73583b69b404',
        author: 'shuangyue' // 验证一下作者,增加安全性,防止误删
    })
    console.log(res)
})()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值