Mongodb学习

一、初步了解

1.1 Mongodb 是什么

MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/

1.2 数据库是什么

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

1.3 数据库的作用

数据库的主要作用就是 管理数据 ,对数据进行 增(c)、删(d)、改(u)、查(r)

1.4 数据库管理数据的特点

相比于纯文件管理数据,数据库管理数据有如下特点:

  • 速度更快(数据库往往借助内存作为缓存)
  • 扩展性更强
  • 安全性更强
  • JavaScript 类似,容易上手,学习成本低。

二、核心概念

Mongodb 中有三个重要概念需要掌握

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

2.1 理解

通过 JSON 文件来理解 Mongodb 中的概念

  • 一个 JSON 文件 好比是一个 数据库 ,一个 Mongodb 服务下可以有 N 个数据库
  • JSON 文件中的 一级属性的值 好比是 集合
  • 数组中的对象好比是 文档
  • 对象中的属性有时也称之为 字段

. 一般情况下

. - 一个项目使用一个数据库

. - 一个集合会存储同一种类型的数据

2.2 下载安装、启动

下载地址: https://www.mongodb.com/try/download/community

建议选择 zip 类型, 通用性更强

配置步骤如下:

  1. 将压缩包移动到 C:\Program Files 下,然后解压
  2. 创建 C:\data\db 目录,mongodb 会将数据默认保存在这个文件夹
  3. 以 mongodb 中 bin 目录作为工作目录,启动命令行
  4. 运行命令 mongod(相当于运行mondod.exe文件)
    看到最后的 waiting for connections 则表明服务 已经启动成功

现在是服务端!!!!

现在的服务端是mongodb服务,支持mongodb协议

. 重新打开一个窗口,使用 mongo 命令连接本机的 mongodb 服务

现在是客户端!!!!!

注意:

  • 为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path 中
  • 千万不要选中服务端窗口的内容 ,选中会停止服务,可以 敲回车 取消选中

三、数据库与集合命令

命令行交互一般是学习数据库的第一步,不过这些命令在后续用的比较少,所以了解即可。

3.1 数据库命令

  1. 显示所有数据库show dbs
  2. 切换到指定的数据库use dbs,如果数据库不存在会自动创建数据库(不过要在数据库有内容时,才会显示,否则还是不显示)

在上述数据库创建一个集合后,再使用show dbs

  1. 显示当前所在的数据库db
  2. 删除当前数据库
javascript 复制代码
use 库名
db.dropDatabase()

3.2 集合命令

  1. 创建集合db.createCollection('集合名称')
  2. 显示当前数据库中的所有集合show collections
  3. 删除某个集合db.集合名.drop()
  4. 重命名集合db.集合名.renameCollection('newName')

3.3 文档命令

  1. 插入文档db.集合名.insert(文档对象);
  2. 查询文档db.集合名.find(查询条件)(_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档)
  3. 更新文档
javascript 复制代码
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})
  1. 删除文档db.集合名.remove(查询条件)

3.4 应用场景

  1. 新增
    用户注册
    发布视频
    发布商品
    发朋友圈
    发评论
    发微博
    发弹幕
  2. 删除
    删除评论
    删除商品
    删除文章
    删除视频
    删除微博
  3. 更新
    更新个人信息
    修改商品价格
    修改文章内容
  4. 查询
    商品列表
    视频列表
    朋友圈列表
    微博列表
    搜索功能

四、Mongoose

4.1 介绍

Mongoose 是一个对象文档模型库 ,官网 http://www.mongoosejs.net/

4.2 作用

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

另一种交互方式 : 我们在命令行使用mongo

4.3 初体验

  1. 初始化 npm init
  2. 安装mongoose包npm i mongoose

mongo服务器的默认端口是27017

go 复制代码
> show dataBase1
uncaught exception: Error: don't know how to show [dataBase1] :
shellHelper.show@src/mongo/shell/utils.js:1211:11
shellHelper@src/mongo/shell/utils.js:838:15
@(shellhelp2):1:1
> use dataBase1
switched to db dataBase1
> db.createCollection('collect1')
{ "ok" : 1 }
> db.collect1.insert({name:'lucy',age:20})
WriteResult({ "nInserted" : 1 })
> db.collect1.insert({name:'flavia',age:19})
WriteResult({ "nInserted" : 1 })
> db.collect1.insert({name:'ping',age:22})
WriteResult({ "nInserted" : 1 })
> db.collect1.find()
{ "_id" : ObjectId("6512d475aa0c865bbe64a957"), "name" : "lucy", "age" : 20 }
{ "_id" : ObjectId("6512d488aa0c865bbe64a958"), "name" : "flavia", "age" : 19 }
{ "_id" : ObjectId("6512d495aa0c865bbe64a959"), "name" : "ping", "age" : 22 }
> show dbs
admin      0.000GB
config     0.000GB
dataBase1  0.000GB
local      0.000GB

报错

!!!!!!!!!!

一定要进入当前路径!!!!!!!!!!

javascript 复制代码
//导入mongoose
const mongoose=require('mongoose')
//连接mongodb服务
//协议名://主机:端口/数据库名
mongoose.connect('mongodb://127.0.0.1:27017/dataBase1')
// 设置连接成功的回调
// on绑定事件
mongoose.connection.on('open',()=>{
    console.log('连接成功')
});
// 设置连接失败的回调
mongoose.connection.on('error',()=>{
    console.log('连接失败')
});
// 设置连接关闭的回调
mongoose.connection.on('close',()=>{
    console.log('连接关闭')
});
//设置定时关闭连接
setTimeout(()=>{
    mongoose.disconnect()
},3000)

官方推荐使用once进行连接

javascript 复制代码
//官方推荐使用once
mongoose.connection.once('open',()=>{
    console.log('连接成功')
});

4.4 使用流程

【弹幕】最新版本不支持这种回调函数方法,只能用.then((data)=>{})的方法了。

javascript 复制代码
const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/dataBase1')
// 设置连接成功的回调
//官方推荐使用once(在open时)
mongoose.connection.once('open', async () => {
    // 创建文档的结构对象------------设置集合中文档的属性 以及属性值的类型
    let collect2Schema = new mongoose.Schema({
        name: String,
        author: String,
        price: Number
    })
    // 创建模型对象------------对文档操作的封装对象
    // 参数(集合名称,结构对象)
    let collect2Model = mongoose.model('collect2', collect2Schema)
    try {
        const data = await collect2Model.create({
            name: 'a书',
            author: 'lucy',
            price: 19.9
        });
        console.log(data);
        console.log('连接成功');
    } catch (err) {
        console.log(err);
    }

    console.log('连接成功')
});

// 设置连接失败的回调
mongoose.connection.on('error', () => {
    console.log('连接失败')
});
// 设置连接关闭的回调
mongoose.connection.on('close', () => {
    console.log('连接关闭')
});

4.5 字段类型

类型 描述
String 字符串
Number 数字
Boolean 布尔值
Array 数组,也可以使用 [] 来标识
Date 日期
Buffer Buffer 对象
Mixed 任意类型,需要使用 mongoose.Schema.Types.Mixed 指定
ObjectId 对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定
Decimal128 高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定

类型不一致,导致报错


4.6 字段值验证

(1)必填项

javascript 复制代码
let collect2Schema = new mongoose.Schema({
        name: {
            type:String,
            required:true
        },
        author: String,
        price: Number,
        isHot:Boolean
    })
    let collect2Model = mongoose.model('collect2', collect2Schema)

// 新增
    try {
        const data = await collect2Model.create({
            name: 'a书',
            author: 'lucy',
            price: 19.9,
        })
        console.log(data);
        console.log('连接成功');
    } catch (err) {
        console.log(err);
    }

正常输出

如果注释掉,name,则报错

(2)默认值

javascript 复制代码
author: {
type: String,
default: '匿名' //默认值
},

(3) 枚举值

javascript 复制代码
gender: {
type: String,
enum: ['男','女'] //设置的值必须是数组中的
},

(4)唯一值

要插入的这个值必须是独一无二的,不能有重复的此条数据。

javascript 复制代码
username: {
type: String,
unique: true
},

unique 需要 重建集合 才能有效果 永远不要相信用户的输入

4.7 增删改查

数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)

4.8 模块化

暴露函数

五、图形化工具

我们可以使用图形化的管理工具来对 Mongodb 进行交互,这里演示两个图形化工具

相关推荐
eggcode1 小时前
IDEA与Maven使用-学习记录(持续补充...)
学习·maven·intellij-idea
RisingWave中文开源社区1 小时前
经验分享|用开源产品构建一个高性能实时推荐引擎
数据库·后端·开源
charlie1145141913 小时前
从0开始的操作系统手搓教程33:挂载我们的文件系统
学习·系统架构·操作系统·教程·文件系统·手搓教程
jay丿3 小时前
Django 初始化导入数据详解
数据库·django·sqlite
CodeJourney.3 小时前
用DEEPSEEK做数据看板:高效、实用与创新的融合
数据库·人工智能·python·算法
xuanloyer3 小时前
第二篇《Active Data Guard 实战:打造高可用数据库》(ADG)
运维·数据库·oracle
雨墨C4 小时前
LLM学习之路-01-第一章-预训练/搞懂大模型的分词器(二)
人工智能·学习·自然语言处理·chatgpt·大模型·transformer
skywalk81634 小时前
OWL(Optimized Workforce Learning): 优化劳动力学习的通用智能体,用于处理现实世界的自动化任务(58.18 平均分)
人工智能·学习·自动化·agent
charlie1145141914 小时前
IMX6ULL驱动开发uboot篇02
驱动开发·学习·操作系统·内核·教程·uboot