Day15-MongoDB数据库操作

本文介绍了MongoDB的基本概念,包括其作为非关系型数据库的用途,详细步骤指导如何安装MongoDB和Navicat客户端,以及通过Node.js使用mongoose操作数据库,包括Model的设计和CRUD操作实例。
摘要由CSDN通过智能技术生成

Day15-MongoDB数据库操作

一 简介

数据库就是用来存储数据的仓库

常用的数据库:Oracle,MySql,Sqlit,MongoDB

MongoDB是一种非关系型数据库,主要用来存储json数据

二 安装mongodb

双击mongodb安装包

image-20230209195827287

image-20230209195946095

image-20230209200005846

image-20230209200015013

image-20230209200023900

image-20230209200032680

image-20230209200040190

三 安装Navicat

1 安装Navicat

2 破解Navicat

3 使用Navicat连接mongodb

image-20230210091023599

image-20230210092022138

4 新建数据库

image-20230210092417611

5 新建集合

image-20230210113350118

6.在navicat右下角可以进行视图切换

image-20230210121857160

四 Nodejs操作mongodb数据库

1 编写db.js

(1)安装mongoose插件

 npm i mongoose@6.9.1

(2)在项目种创建utils文件夹,里面创建db.js文件

let mongoose = require("mongoose")
mongoose.connect("mongodb://127.0.0.1:27017/movieApp",(error)=>{
    if(error){
        console.log("数据库链接失败",error);
    }else{
        console.log("数据库链接成功");
    }
})

(3)app.js文件,引入db.js

var logger = require('morgan');

//路由请求之前,连接数据库
require('./utils/db')

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
let moviesRouter = require('./routes/movies')

(4)启动项目,加载db.js。测试能否连接数据库

nodemon app.js

2 设计Model来操作数据库

(1)在项目中新建model文件夹

(2)在model文件夹下新建UserModel.js文件

/**
 * 1.导入mongoose插件,并解构出Schema(类) model(对象)
 */
const {Schema,model} = require("mongoose")

/**
 * 2.使用Schema创建集合对象
 */
const userSchema = new Schema({
    username:String,
    password:String
},({versionKey:false}))
//({versionKey:false}) 向数据库中新增数据时,不生成_v这个字段

/**
 * 3.暴露model对象
 * 参数一 模型名    参数二 Schema对象  参数三 数据库中集合的名称
 */
module.exports = model("UserModel",userSchema,"userinfo")

(3)在UserController.js中导入UserModel.js

image-20230613144136302

(4) 在UserController.js中编写增删改查相关的代码

/**
 * 导入UserModel
 */
let userModel = require("../model/UserModel")

class UserController{
    /**
     * 查询所有
     * async和await一定同时出现,他们的作用就是让函数里面的代码变成同步代码
     */
    async findAll(req,res){
        // 调用模型的查询方法,查询所有的数据
        //查询数据库是一个非常耗时的操作,查询数据库的操作可能还没有执行完成,这个函数里面其它的代码都已经跑完了
        const result = await userModel.find()
        res.send({code:200,msg:"查询成功",data:result})
    }

    /**
     * 根据id查询
     */
    async getUserinfo(req,res){
        const {_id} = req.query
        const result = await userModel.find({_id})
        const obj = result[0]
        res.send({code:200,msg:"查询成功",data:obj})
    }

    /**
     * 登录
     */
    async login(req,res){
        const {username,password} = req.body
        const result = await userModel.find({username,password})
        if(result.length == 0){
            res.send({code:500,msg:"账号或密码错误",data:{}})
        }else{
            let {_id,username} = result[0]
            let user = {_id,username}
            res.send({code:200,msg:"登录成功",data:user})
        }
    }

    /**
     * 注册
     */
    async register(req,res){
        let {username,password} = req.body
        //1.判断账号是否存在
        let arr1 = await userModel.find({username})
        if(arr1.length > 0){
            res.send({code:500,msg:"账号已存在,注册失败"})
        }else{
            //2.把数据保存到数据库
            await userModel.create({
                username,
                password
            })
            res.send({code:200,msg:"注册成功"})
        }
    }

    /**
     * 根据id删除
     */
    async deleteById(req,res){
        let {_id} = req.body
        let result = await userModel.deleteOne({_id})
        if(result.deletedCount == 1){
            res.send({code:200,msg:"删除成功"})
        }else{
            res.send({code:500,msg:"删除失败"})
        }    
    }

    /**
     * 根据id修改密码
     */
    async updatePasswordById(req,res){
        let {_id,newPassword} = req.body
        let result = await userModel.updateOne({_id},{password:newPassword})
        if(result.modifiedCount == 1){
            res.send({code:200,msg:"修改成功"})
        }else{
            res.send({code:500,msg:"修改失败"})
        }
        
    }

}

module.exports = new UserController()

程序按照从上往下的顺序执行的代码,称为同步代码

程序没有按照从上往下的顺序自习的代码,称为异步代码

UserModel中所有的操作都是异步

async(异步) 写在方法前面

await(等待) 写在调用异步方法的前面

async和await的作用是让异步代码变成同步代码

String:代表字符串

Number:代表数字

Date:代表日期

Array:数组

Boolean:布尔类型值

ObjectId:对象编号

Decimal128:代表小数,小数点后更精确

3 mongodb的查询

表名.find(查询条件)

查询条件
const data = await  UserModel_DB.find({_id:"1"}) 找id为1的数据
const data = await  UserModel_DB.find({username:"admin"}) 找到标题中包含admin的数据
{price:{$lt:1000}}  找到价格小于1000的项 ($lt小于 $lte小于等于 $gt大于 $gte大于等于)


let  count = await UserModel_DB.find().count() // 统计数量
let  count = await UserModel_DB.find().limit(4)  // 查询前4条
let  count = await goods.find().skip(4).limit(4) //跳过前4条再取出4条数据
let  data = await UserModel_DB.find().sort({price:1}) //根据价格排序  -1 降序  1 升序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值