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({“字段名”})
上面暂时都是常常使用到的操作,暂时先梳理到这里,其他的咱们下一篇再接着写,关于上述的操作,还是需要自己一一过一便,经过自己的大脑去思考和对比,才能熟悉的快,以后真正需要的时候就能很快的用上
欢迎点赞,关注,收藏朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是小魔童哪吒,欢迎点赞关注收藏,下次见~