Node学习-05-MongoDB

218 阅读3分钟

Node学习-05-MongoDB

安装MongoDB

mongod -version

开启和关闭MongoDB数据库

  • 确保安装目录所在盘根目录下存在 data/db文件夹(数据存储目录)

  • cmd中输入mongod启动数据库

  • 修改数据存储目录

    mongod --dbpath=数据存储目录路径
    
  • 停止: ctrl + c或者直接关闭cmd

MongoDB基本感知

连接数据库

// 默认连接本机的MongoDB服务
mongo

退出

exit

基本命令

  • 显示所有数据库

    show dbs
    
  • 查看当前操作的数据库

    db
    
  • 创建数据库

    use 数据库名称(如果没有会新建)
    
  • 插入数据

    db.students.insertOne({"name": "xxx"});
    
  • 查看所有数据

    db.students.find();
    

在Node中操作MongoDB数据

mongoose

使用第三方mongoose来操作MongoDB数据库

安装

npm install --save mongodb

使用demo

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

const Cat = mongoose.model('Cat', { name: String });

// const kitty = new Cat({ name: 'Zildjian' });
// kitty.save().then(() => console.log('meow'));

for (var i = 0; i< 100; i++) {
    var kitty = new Cat({name: '喵喵' + i});

    kitty.save().then(() => {
        console.log('meow');
    })
}

基本概念

  • 数据库,可以存在多个数据库
  • 数据表 -> 集合,集合简单理解就是数组
  • 文档
{
    // 数据库
    qq: {
        // 集合
        users: [
            // 文档
            {id: 1, name: 'aaa'}{id: 2, name" 'bbb'}
        ],
        products: []
    },
    taobao: {

    },
    baidu: {

    }
}

CRUD基本用法

// 引入
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// 连接数据库
// localhost itcast数据库
// 如果itcast数据库不存在,当插入第一条数据库之后,自动创建
mongoose.connect('mongodb://localhost/itcast');

// 设计集合结构/表结构
// 字段名称就是表结构中的属性名称 
const userSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    email: {
        type: String
    }
});

// 将文档结构发布为模型
// mongoose.model方法就是用来将一个架构发布为model
// 第一个参数:传入一个大写名词单数字符串,用来表示数据库名称,mongoose会自动将
// 大写名词的字符串 生成 小写复数 的集合名词 User -> users
// 第二个参数, 架构Schema
// 返回值:模型构造函数
const User = mongoose.model('User', userSchema);

// 当有了模型构造数据之后,就可以使用这个构造函数对user集合中的数据进行增删改查了

// 增加数据
const admin = new User({
    username: 'admin',
    password: '123456',
    email: 'admin@123.com'
});
admin.save().then((res) => {
    console.log(res);
    console.log('保存成功');
});

// 查询数据
// 1. 查询所有
console.log('----------查询所有-------------------');
User.find().then(res => console.log(res));

// 按条件查询,返回一个数组
console.log('----------按条件查询-------------------');
User.find({ username: 'ZS' }).then(res => console.log(res));


// 只查询一个,只返回一个对象
console.log('----------只查询一个-------------------');
User.findOne({ username: 'ZS' }).then(res => console.log(res));

// 删除数据
User.deleteMany({ username: 'ZS' }).then(res => console.log(res));

// 更新数据
User.findByIdAndUpdate("61061a42c988a30d10ec8e1d", { password: '123' })
    .then(res => console.log(res));

CRUD案例mongoose重写

students.js

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/students', { useUnifiedTopology: true }, { useNewUrlParser: true });
const Schema = mongoose.Schema;

const studentSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    gender: {
        type: String,
        enum: ['0', '1'],
        required: true
    },
    age: {
        type: Number
    },
    hobbies: {
        type: String
    }
});


module.exports = mongoose.model('Student', studentSchema);

router.js

const fs = require('fs');
const Student = require('./students.js');

const express = require('express');

// 1. 创建一个路由容器
const router = express.Router();

// 2. 把路由都挂载到路由容器中

// 主界面
router.get('/students', function (req, res) {
    Student.find(function (err, data) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.render('index.html', {
            students: data
        })
    })

})

// 新增页面
router.get('/students/new', function (req, res) {
    res.render('new.html');
})

// 点击新增时候的处理
router.post('/students/new', function (req, res) {
    const student =  new Student(req.body);
    student.save(function (err, data) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.redirect('/students');
    });

})

// 编辑页面
router.get('/students/edit', function (req, res) {
    Student.findById(req.query.id, function (err, data) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.render('edit.html', {
            student: data
        })
    })
})

// 点击编辑时候的处理
router.post('/students/edit', function (req, res) {
    const id = req.body.id;
    Student.findByIdAndUpdate(id, req.body, function (err, data) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.redirect('/students');
    })
})

// 点击删除时候的处理
router.get('/students/delete', function (req, res) {
    Student.findByIdAndRemove(req.query.id, function(err, data) {
        if (err) {
            return res.status(500).send('Server error');
        }
        res.redirect('/students');
    });
})

module.exports = router;