MongoDB

ppgo8 于 2023-05-25 发布

MongoDB

简介

MongoDB是什么

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

数据库是什么

按照数据结构组织、存储数据的一种应用程序

数据库的作用

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

数据库管理数据的特点

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

  1. 速度快
  2. 拓展性强:当数据量增大时,可以创建多个数据库
  3. 安全性更强:数据加密存储、身份校验

为什么选择MongoDB

操作语法和JavaScript类似,易上手

MongoDB核心概念

MongoDB中有三个概念需要掌握:

可以通过JSON文件来理解MongoDB中的概念

一般情况下

  • 一个项目使用一个数据库
  • 一个集合会存储同一种类型的数据;比如账单集合、用户集合

安装MongoDB

mongod启动服务器服务

mongo启动客户端

上述两个命令需要在两个cmd窗口中运行,且必须先启动服务器

为了方便后续mongod命令的使用,可以将bin目录配置到环境变量

千万不要选中服务端窗口的内容,选中会停止服务,可以敲回车取消选中

数据库与集合命令

命令行 交互是学习的第一步,不过这些命令在后续用的较少。

数据库命令

# 显示所有数据库
show dbs
# 切换数据库到指定库,如果没有则创建
use 数据库名
# 显示当前数据库
db
# 删除当前数据库
use 库名
db.dropDatabase()

集合命令

# 显示当前数据库所有集合
show collections
# 创建集合
db.craeteCollection('集合名称')
# 删除某个集合
db.集合名.doop()
# 重命名集合
db.集合名.renameCollection('newname')

文档命令

# 插入文档
db.集合名.insert(文档对象)
# 查询文档
db.集合名.find(查询条件)
# 更新文档
db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}}) # $set可以保证值修改age属性,而不是覆盖整个
# 删除文档
db.集合名.remove(查询条件)

应用场景

新增

删除

伪删除

  • 在文档里面添加属性,true false表示这个文档是否删除

  • 好处:用户不小心误操作,可以恢复

更新

查询

Mongoose

mongoose是一个包,使用npm命令安装

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

基础使用操作

// 安装mongooose 

// 导入mongooose
const mongoose = require('mongoose')
// 连接mongodb数据库
mongoose.connect('mongodb://127.0.0.1:27017/bilibili')  // 如果不存在这个数据库会自动创建

// 设置回调
// 连接成功;官方推荐用once而不是用on
// once:事件只执行一次
mongoose.connection.once('open',()=>{
    console.log('连接成功');
}) 
// 连接失败
mongoose.connection.on('error',()=>{
    console.log('连接失败');
}) 
// 连接关闭
mongoose.connection.on('close',()=>{
    console.log('连接关闭');
}) 

// 关闭mogodb连接
setTimeout(()=>{
    mongoose.disconnect()
},2000)

once是防止数据库掉线重连的情况,因为连接数据库和一般都结合很多功能代码,重新运行可能有问题

字段类型

文档id:作用外键 存储另外一个文档的id

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

字段验证

字段验证:对字段值进行验证

# 在文档对象结构中设置
# 字段必填
字段名:{
	type:xxx,
	required:true  # 设置必填
}
# 默认值
字段名:{
	type:xxx,
	default:xxx
}
# 枚举值
字段名:{
	type:xxx,
	enum:['a',...,'b']
}
# 唯一值
字段名:{
	type:xxx,
	unqiue:true
}

unqiue使用,必须重建集合(或者是一个新集合),在旧的集合上新添加这个操作没有用。

增删改查

细节:mongoose会使用集合名称的复数来创建集合,自动变成复数形式。

条件控制

如何设置查询文档的条件,之前都是等于条件。

没写代码

https://www.bilibili.com/video/BV1gM411W7ex?p=145&vd_source=dde2f4dd432156027fedf9b1734ba705

运算符

逻辑运算

正则匹配

个性化读取

字段筛选

select

默认返回全部的字段;有时候只读取某些属性,相当于mysql中的select字段

_id默认会返回,就算在select不设置为1也会返回,需要显式设置为0才会不显示;

数据排序

sort

升序1

导入0

数据截取

limit

limit(n) 取前n

skip(m).limit(n)取m-n的数据‘

skip常用来分页

后端取一点数据前端渲染一点,用户发送了请求再取下面的数据

Mongoose代码模块化

将代码拆分

https://www.bilibili.com/video/BV1gM411W7ex?p=147&spm_id_from=pageDriver&vd_source=dde2f4dd432156027fedf9b1734ba705

第二个模块化非常重要

图形化管理工具

操作mongodb数据库的三种方法

image-20230525202342311