mongodb 基本概念

2023-02-16 11:23:25 浏览数 (2)

mongodb 基本概念

  • 文档

是 mongodb 的最小数据集单位,是多个键值对有序租户在一起的数据单元,类似于关系型数据库的记录

  • 集合

一组文档的集合,文档存放的是数据,集合内的结构是可以不同的,集合就类似于关系型数据库的表

数据库,由多个集合组成的。每个数据库都是完全独立的,有自己的用户,权限信息,独立的存储文件夹

  • 实例

在系统运行库的进程及节点集,一个实例可以有多个数据库

关系型数据库和 mongodb 对比

例如 mongodb 和 mysql 进行对比

文件名

MongoDB

Mysql

服务名

mongod

mysqld

客户端名

mongo

mysql

类似于这这种数据库开源组件,服务名字后面都会有一个 d

客户端程序,是用于与服务端程序通信的

关系型数据库 和 mongodb 基本概念对比学习

概念

关系型数据库

Mongdb

数据库

database

database

table

collection

数据行

row data

document

字段

column

field

索引

index

index

表关联

join

embedding 或 linkding

分片 / 分区

partition

shard

分区键

partition key

sharding key

上述表格中,我们可以清晰的看出,mongodb 中的 文档 对应着关系型数据库的行数据,mongodb 中的 集合 对应着关系型数据库的 表格

mongodb 的数据类型

前面图上有提到,mongodb 中的文档类似于 json 对象,属于 json 中的一种,称为 bson。

文档中字段中的值可以包括其他文档,成为内嵌文档,也可以包括数组和文档数据

关于文档存储的优点有这些:

  • 文档

即为对象,对应于许多编程语言中的本机数据类型

  • 嵌入式文档和数组减少了对连接的需求
  • 动态模式支持流畅的多态性

咱们一起来看看 bson 都有哪些数据类型,bson 是 json 文档的二进制表示形式,bson 包含了比 json 更多的数据类型,如下:

type

number

说明

Double

1

双精度浮点值

String

2

字符串,UTF-8才是合法的

Object

3

用于内嵌文档

Array

4

数组

Binary data

5

二进制数据

Udefined

6

“undefined”

Objectid

7

对象 id

Boolean

8

布尔

Date

9

日期时间,unix 标准

Null

10

创建空值

Regular Expression

11

正则表达式

DBPointer

12

“dbPointer”

JavaScript

13

“javascript“

Symbol

14

“symbol”

JavaScript(with scope)

15

“javascript with scope”

32 - bit integer

16

int 类型

Timestamp

17

mongodb 复制和 sharing 使用的特殊内部类型,前 4 个字节是增量,挨着的 4 字节是时间戳

64-bit integer

18

long 类型

Decimal128

19

decimal

Min key

-1

比正常 bson 类型元素值都低的类型 与 255 是同样的效果

Max key

127

比正常 bson 类型元素值都高的类型

需要注意的一点:

一个 bson 文档最大的大小是 16M,并且文档嵌套级别不能超过 100 层

看到这里是不是和上述说到的 mongodb 能够存储大量数据 TB 或者 PB 级别的有点矛盾了,没关系,我们来看看这个数据类型

GridFS

https://docs.mongodb.com/manual/core/gridfs/

用于存储和检索超过BSON-document大小限制 (16mb) 就会使用到 GridFS 数据类型

mongodb 的简单安装

mongodb 的安装方式就不在这里赘述了,可以查看我的历史文章 一文便知 GO 中mongodb 的安装与使用

mongodb 的基本命令使用

总结 mongodb 常用命令

命令

作用

use 数据库名字

若数据库不存在则创建,若存在则使用

show dbs

显示数据库

db.dropDatabase()

删除当前数据库

db.集合名字.drop()

删除集合

db.createCollection("集合名字")

创建集合

db.集合名字.insert({})

若集合不存在,默认创建并插入数据若集合存在,则插入数据

show collections / show tables

显示当前数据的集合

db.集合名字.insertOne({})

插入一条数据

db.集合名字.insertMany({[]})

插入多条数据

db.集合名字.find()

查找当前表格所有数据

db.集合名字.update({条件},{要做的更新操作})

更新文档数据

db.collection.save({带有 Objectid 的数据})

替换已有文档,若 Objectid 主键存在就更新,不存在就插入

db.collection.remove({})

删除文档

db.集合名字.find().pretty()

以更友好的方式输出

关于新建文档注意事项

  • 新建文档,会自动创建不存在的集合,数据库
  • 如果不指定主键,则会自动生成主键 _id 和他对应的值
  • 写操作都是基本单个文档级别的原子操作

关于 mongo db 查询操作,我们可以有如下运算符可以使用

运算符

说明

$eq

等于

$lt

小于

$lte

小于等于

$gt

大于

$gte

大于等于

$in

判断元素是否在指定的集合范围里

$all

判断数组中是否包含某几个元素,无关顺序

$nin

判断元素是否不在指定的集合范围里

$ne

不等于

$not

不匹配结果

$or

有一个条件成立则匹配

$nor

所以条件都不匹配

$and

所有条件都必须匹配

$exists

判断元素是否存在

.

子文档匹配

$regex

正则表达式匹配

关于 mongodb 查询的其他操作:

  • 选择需要的字段

db.集合名字.find({},{字段名:1})

  • 排除不需要的字段

db.集合名字.find({},{字段名:0})

  • 数组子元素的选择

db.集合名字.find({},{“字段名.子文档名的字段”:{$slice:[1,2]})

$slice ,可以取两个元素数组,分别表示跳过数和限制数

  • 排序

sort()

db.集合名.find().sort({“字段名”:1})

1 是升序

2 是降序

  • 跳过和限制

skip(n) , 跳过 n 条数据

limit(n) ,限制 n 条数据

db.集合名.find().skip(3).limit(2)

  • 查询唯一的值

db.集合名.find().distinct({“字段名”})

上面暂时都是常常使用到的操作,暂时先梳理到这里,其他的咱们下一篇再接着写,关于上述的操作,还是需要自己一一过一便,经过自己的大脑去思考和对比,才能熟悉的快,以后真正需要的时候就能很快的用上

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

0 人点赞