• 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对象 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/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({“字段名”})

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

    欢迎点赞,关注,收藏

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o8JWYBGx-1662560468508)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dbd0fa27d61a491f9860dc938de52008~tplv-k3u1fbpfcp-zoom-1.image)]

    好了,本次就到这里

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

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

  • 相关阅读:
    AI在商业逻辑应用中的革命性作用
    Windows字体美化指南
    Unity中,如何在【编辑器】和【运行时】状态下读写一个ScriptableObject对象
    一文图解原理|Linux I/O 神器之 io_uring
    多级式多传感器信息融合中的状态估计(Matlab代码实现)
    为何三层交换机下内网主机与内网服务器和外网主机均不通(相关搜索:软件设计)
    MES系统价格具体跟哪些因素相关?
    将conda环境打包成docker步骤
    8月份补丁更新:微软修补了121个安全漏洞
    石头科技: 决胜百亿扫地机器人“价值高地”
  • 原文地址:https://blog.csdn.net/m0_37322399/article/details/126755186