• node教程(四)Mongodb+mongoose


    一、mongodb

    1.简介

    1.1Mongodb是什么?

    Mongodb是一个基于分布式文件存储的数据库

    1.2数据库是什么?

    数据库是按照数据结构来组织、存储和管理数据的应用程序。

    1.3数据库的作用

    主要作用就是管理数据,对数据进行增删改查

    1.4数据库管理数据的特点

    相比于纯文件,数据库管理数据具有如下特点:
    1.速度更快
    2.拓展性更强
    3.安全性更强
    2.核心概念

    2.核心概念

    Mongodb中有三个重要概念

    • 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
    • 集合:集合类似于JS中的数组,在集合中可以存放很多文档
    • 文档:文档是数据库中的最小单位,类似于JS中的对象

    在这里插入图片描述

    3.下载安装与启动

    https://www.mongodb.com/try/download/community
    千万不要选中服务端窗口的内容,选中会停止服务,可以敲回车取消选中

    4.命令行交互

    4.1数据库命令

    1.显示所有的数据库

    show dbs
    
    • 1

    2.切换到指定的数据库,如果数据库不存在则会自动创建数据库

    use 数据库名
    
    • 1

    3.显示当前所在数据库

    db
    
    • 1

    4.删除当前数据库

    use 库名
    db.dropDatabase()
    
    • 1
    • 2

    4.2集合命令
    1.创建集合

    db.createCollection('集合名称')
    
    • 1

    2.显示当前数据库中的所有集合

    show collections
    
    • 1

    3.删除某个集合

    db.集合名.drop()
    
    • 1

    4.重命名集合

    db.集合名.renameCollection('new name')
    
    • 1

    4.3文档命令

    1.插入文档

    db.集合名.insert('文档对象')
    
    • 1

    2.查询文档

    db.集合名.find(查询条件)
    
    • 1

    _id是mongodb自动生成的唯一编号,用来唯一标识文档
    3.更新文档

    db.集合名.update(查询条件,新的文档)
    db.集合名.update({name:'张三'}{$set:{age:19}})
    
    • 1
    • 2

    4.删除文档

    db.集合名.remove(查询条件)
    
    • 1

    二、Mongoose

    1.介绍

    是一个对象文档模型库

    2.作用

    方便使用代码操作mongodb数据库

    3.使用流程

    // 安装mongoose
    // 导入mongoose
    const mongoose = require('mongoose');
    
    // 连接mongodb服务                      数据库的名称
    mongoose.connect('mongodb://127.0.0.1:27017/abc')
    
    /* 设置回调 */
    mongoose.connection.on('open',() => {
        console.log('连接成功');
    }); // 设置连接成功的回调
    mongoose.connection.on('error',() => {
        console.log('连接失败');
    }); //连接失败的回调
    mongoose.connection.on('close',() => {
        console.log('连接关闭');
    }); //设置连接关闭的回调
    
    // 关闭mongodb的连接
    setTimeout(() => {
        mongoose.disconnect();
    },2000)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.插入文档

    出现以下问题

     throw new MongooseError('Model.create() no longer accepts a callback');
    
    • 1

    是由于mongoose版本太高,可以手动降级

    npm i mongoose@6.8.0
    
    • 1
    // 安装mongoose
    // 导入mongoose
    const mongoose = require('mongoose');
    
    // 连接mongodb服务                      数据库的名称
    mongoose.connect('mongodb://127.0.0.1:27017/abc')
    
    /* 设置回调 */
    mongoose.connection.once('open',() => {
        // console.log('连接成功');
        // 5.创建文档的结构对象
        // 设置集合中文档的属性以及属性值的类型
        let BookSchema = new mongoose.Schema({
            name:String,
            author: String,
            price: Number
        });
    
        // 创建模型对象  对文档操作的封装对象
        let BookModel = mongoose.model('books',BookSchema);
    
        // 新增
        BookModel.create({
            name:'xiyouji',
            author:'吴承恩',
            price:19.9
        },(err,data) => {
            if(err){
                console.log(err);
                return;
            }
            // 如果没有出错,则输出插入后的文档对象
            console.log(data);
            // 关闭数据库连接(项目运行过程中不会添加此代码)
            mongoose.disconnect();
        });
    
    }); // 设置连接成功的回调
    
    mongoose.connection.on('error',() => {
        console.log('连接失败');
    }); //连接失败的回调
    mongoose.connection.on('close',() => {
        console.log('连接关闭');
    }); //设置连接关闭的回调
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    5.mongoose字段类型

    文档结构可选的常用字段类型列表
    在这里插入图片描述

    // 安装mongoose
    // 导入mongoose
    const { Mixed } = require('mongoose');
    const mongoose = require('mongoose');
    
    // 连接mongodb服务                      数据库的名称
    mongoose.connect('mongodb://127.0.0.1:27017/abc')
    
    /* 设置回调 */
    mongoose.connection.once('open',() => {
        // console.log('连接成功');
        // 5.创建文档的结构对象
        // 设置集合中文档的属性以及属性值的类型
        let BookSchema = new mongoose.Schema({
            name:String,
            author: String,
            price: Number,
            is_hot:Boolean,
            tags:Array,
            pub_time:Date,
            test:mongoose.Schema.Types.Mixed 
        });
    
        // 创建模型对象  对文档操作的封装对象
        let BookModel = mongoose.model('books',BookSchema);
    
        // 新增
        BookModel.create({
            name:'xiyouji',
            author:'吴承恩',
            price:19.9,
            is_hot:true,
            tags:['鬼怪','励志'],
            pub_time:new Date(),
            test:'abc'
        },(err,data) => {
            if(err){
                console.log(err);
                return;
            }
            // 如果没有出错,则输出插入后的文档对象
            console.log(data);
            // 关闭数据库连接(项目运行过程中不会添加此代码)
            mongoose.disconnect();
        });
    
    }); // 设置连接成功的回调
    
    mongoose.connection.on('error',() => {
        console.log('连接失败');
    }); //连接失败的回调
    mongoose.connection.on('close',() => {
        console.log('连接关闭');
    }); //设置连接关闭的回调
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    三、图形化管理工具

    我们可以使用图形化的管理工具来对Mongodb进行交互,

    • Robo 3T 免费
    • Navicat
  • 相关阅读:
    【面试题】Redis是单线程的为什么那么快
    Bootstrap的导航元素和Well详解【前端Bootstrap框架】
    腾讯云轻量应用服务器内网连接互通有什么限制?
    “我“是一名测试/开发程序员,小孙的内心独白......
    【第1节】书生·浦语大模型全链路开源开放体系
    达摩院技术创新全景|懂你的语音AI
    图片引用功能导致的XSS漏洞
    NLP机器翻译全景:从基本原理到技术实战全解析
    IP摄像头实现远程目标检测
    IC工程师入门必学,Verilog零基础入门教程
  • 原文地址:https://blog.csdn.net/qq_52986400/article/details/134183047