mongodb 基本概念

阿兵云原生 -
mongodb 基本概念

文档

是 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对象 idBoolean8布尔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 类型Decimal12819decimalMin 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({“字段名”})

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

欢迎点赞,关注,收藏

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

好了,本次就到这里

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

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

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

gomongodb

扩展阅读

加个好友,技术交流

1628738909466805.jpg