• 文档

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

  • 集合

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

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

  • 实例

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

关系型数据库和 mongodb 对比

例如 mongodb 和 mysql 进行对比

文件名MongoDBMysql
服务名mongodmysqld
客户端名mongomysql

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

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

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

概念关系型数据库Mongdb
数据库databasedatabase
tablecollection
数据行row datadocument
字段columnfield
索引indexindex
表关联joinembedding 或 linkding
分片 / 分区partitionshard
分区键partition keysharding key

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

mongodb 的数据类型

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

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

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

  • 文档

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

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

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

typenumber说明
Double1双精度浮点值
String2字符串,UTF-8才是合法的
Object3用于内嵌文档
Array4数组
Binary data5二进制数据
Udefined6“undefined”
Objectid7对象 id
Boolean8布尔
Date9日期时间,unix 标准
Null10创建空值
Regular Expression11正则表达式
DBPointer12“dbPointer”
JavaScript13“javascript“
Symbol14“symbol”
JavaScript(with scope)15“javascript with scope”
32 - bit integer16int 类型
Timestamp17mongodb 复制和 sharing 使用的特殊内部类型,前 4 个字节是增量,挨着的 4 字节是时间戳
64-bit integer18long 类型
Decimal12819decimal
Min key-1比正常 bson 类型元素值都低的类型 与 255 是同样的效果
Max key127比正常 bson 类型元素值都高的类型

需要注意的一点:

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

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

GridFS

https://docs.mongodb.com/manu...

用于存储和检索超过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({“字段名”})

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

欢迎点赞,关注,收藏

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

好了,本次就到这里

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

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


阿兵云原生
192 声望37 粉丝