mongoose操作数据库

本文详细介绍Mongoose库在Node.js环境下操作MongoDB数据库的方法,包括安装、连接数据库及通过实例展示注册接口的增删改查操作。

Mongoose简介

Node是什么模型?对象模型(所有的API都是对象)
Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用。

  1. 安装mongoose

npm install mongoose –D

  1. 连接数据库

使用mongoose连接数据库的前提条件是:
1、mongo数据库已经运行。
2、已经安装了mongoose包。

var mongoose = require("mongoose");
// 连接字符串格式为mongodb://主机/数据库名
mongoose.connect('mongodb://localhost/student');

上面这句的意思是连接到本地的mongodb的student表。


下面以注册接口为例记录mongoose如何操作数据库

  • register接口
const express = require('express');
const user = require('../db');
// console.log(user);
const router = express.Router();

router.route('/')
    .post(async(req, res, next) => {
   
        const { username, pwd } = req.body;
        const result = await user.add({ username, pwd });
        // user.query();
        // console.log(result);
        res.render('register', {
            data: JSON.stringify({
                info: result.info,
                status: result.status
            })
        });
    })
    .delete(async(req, res, next) => {
        const { username, pwd } = req.body;
        const result = await user.remove({ username, pwd });
        res.render('register', {
            data: JSON.stringify({
                status: result.status,
                info: result.info
            })
        });
    })
    .put(async(req, res, next) => {
        const { username, pwd } = req.body;
        const result = await user.modify({ username, pwd });
        res.render('register', {
            data: JSON.stringify({
                status: result.status,
                info: result.info
            })
        });
    })

module.exports = router;
  • 数据库的操作
/* 
  数据库的操作
*/
const mongoose = require('mongoose');

const HOST = '127.0.0.1';
const PORT = 27017;
const DATABASENAME = 'mydb';
//1、连接数据库
mongoose.connect(`mongodb://${HOST}:${PORT}/${DATABASENAME}`, function(err) {
    if (!err) {
        console.log('数据库连接成功');
    } else {
        console.log('数据库连接失败');
    }
});
//2、定义骨架
const userSchema = new mongoose.Schema({
    username: String,
    pwd: String
});
//3、定义模型
const userModel = mongoose.model('users', userSchema);

//4、创建实体
// const userEntity = new userModel();
//5、增删改查
const user = {
    add(data) { //增
        return new Promise((resolve, reject) => {
            userModel.find({}, (err, docs) => {
                // console.log(docs);
                const flag = docs.some(val => val.username === data.username)
                if (flag) {
                    resolve({
                        status: 0,
                        info: '用户名已存在'
                    });
                } else {
                    const userEntity = new userModel();
                    userEntity.username = data.username;
                    userEntity.pwd = data.pwd;
                    userEntity.save(err => {
                        if (!err) {
                            resolve({
                                status: 1,
                                info: '保存成功'
                            });
                        } else {
                            resolve({
                                status: 2,
                                info: '保存失败'
                            })
                        }
                    });

                }
            })

        });
    },
    remove(data) { //删
        return new Promise((resolve, reject) => {
            userModel.find({ username: data.username, pwd: data.pwd }, (err, docs) => {
                // console.log(docs);//json数组
                if (docs.length === 0) {
                    resolve({
                        status: 0,
                        info: '未查到此数据'
                    })
                } else {
                    var id = docs[0]._id;
                    userModel.findById(id, (err, docs) => {
                        docs.remove(err => {
                            if (err) {
                                resolve({
                                    status: 1,
                                    info: '删除失败'
                                })
                            } else {
                                resolve({
                                    status: 2,
                                    info: '删除成功'
                                })
                            }
                        })
                    })
                }
            })
        })
    },
    modify(data) { //改
        return new Promise((resolve, reject) => {
            userModel.find({ username: data.username }, (err, docs) => {
                if (docs.length === 0) {
                    resolve({
                        status: 0,
                        info: '没有此数据'
                    })
                } else {
                    var id = docs[0]._id;
                    userModel.findById(id, (err, docs) => {
                        docs.pwd = data.pwd;
                        docs.save(err => {
                            if (err) {
                                resolve({
                                    status: 1,
                                    info: '修改失败'
                                })
                            } else {
                                resolve({
                                    status: 2,
                                    info: '修改成功'
                                })
                            }
                        })
                    })
                }
            })
        });
    },
    query() { //查
        userModel.find({}, (err, docs) => {
            console.log(docs);
        })
    }
}

module.exports = user;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值