• MongoDB自学笔记(一)


    一、MongoDB简介

    MongoDB是一款基于C++开发的文档型数据库。与传统的关系型数据库有所不同,MongoDB面向的是文档,所谓的文档是一种名为BSON (Binary JSON:二进制JSON格式)是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
    笔者用的是最新的Mongo7.0,客户端工具则使用的是Navicat。

    二、MongoDB和MySQL的区别

    这里直接引用知乎上的一篇文章,个人感觉写的比较清楚。https://zhuanlan.zhihu.com/p/689412013

    三、基本概念

    1、数据库:DB

    指的就是Mongo的一个实例和MySQL中的数据库接本一致,用于保存一个活动多个集合。

    2、集合:Collection

    集合是Mongo中的概念,对应到MySQL中就是一张表,例如 user表、order表等

    3、文档:Document

    Mongo是面向文档的数据库,文档是Mongo中最基本的数据单位,对应到MySQL中就是某张表里的一条数据。

    4、索引:Index

    索引是一种用于加快查询的数据结构,这一点和MySQL中类似。但是也有一定的区别,Mongo中的索引数据结构是B树,而MySQL中默认是B+树

    5、小结

    MongodbMysql
    DB 数据库DB数据库
    集合Collection某一张表
    文档Document某一条数据
    索引Index索引

    四、基本操作

    1、使用某个数据库

    在这里我们有一个名为test的数据库,如果我们想要使用该数据库,可以使用命令 use
    image.png
    我们在客户端工具(这里笔者用的是Navicat)使用命令 use test,结果如下:image.png

    2、集合

    2.1、创建集合

    创建集合对应到MySQL中就是创建一张表,集合就是我们用于保存文档的地方。创建集合的命令如下
    db.createCollection(, )
    name:集合的名称
    options:可选项
    完整的格式如下:

    db.createCollection( <name>,
        {
          capped: <boolean>,
          timeseries: {                  // Added in MongoDB 5.0
             timeField: <string>,        // required for time series collections
             metaField: <string>,
             granularity: <string>,
             bucketMaxSpanSeconds: <number>,  // Added in MongoDB 6.3
             bucketRoundingSeconds: <number>  // Added in MongoDB 6.3
          },
          expireAfterSeconds: <number>,
          clusteredIndex: <document>,  // Added in MongoDB 5.3
          changeStreamPreAndPostImages: <document>,  // Added in MongoDB 6.0
          size: <number>,
          max: <number>,
          storageEngine: <document>,
          validator: <document>,
          validationLevel: <string>,
          validationAction: <string>,
          indexOptionDefaults: <document>,
          viewOn: <string>,
          pipeline: <pipeline>,
          collation: <document>,
          writeConcern: <document>
        }
      )
    

    参数解释:由于篇幅限制这里不赘述,直接引用官网的内容
    db.createCollection()

    实操:创建一个名为learnMongo的集合

    方式一:使用db.createCollectoin命令:db.createCollection(“learnMongo”)
    结果:
    image.png

    方式二:直接插入文档,如果对应的集合不存在Mongo会自动帮我们创建集合
    例如:db.learnUseMongo.insert({“name”:“hardy”,“age”:29,“gender”:“male”})
    结果:WriteResult({ “nInserted” : 1, “writeConcernError” : [ ] }) 从结果中可以看出插入了一条文档
    image.png
    同时当前集合中也存在一条我们刚刚插入的数据
    image.png

    2.1、查询集合

    正如我们在MySQL中想查看当前数据库有多少表一样,Mongo中也可以查看当前数据库中有多少个集合。
    1、查询所有集合的名称:db.getCollectionNames()
    image.png
    2、查询指定名称的集合
    image.png

    2.2、删除集合

    例如我们要删除名为learnMongo的集合
    语法 db..drop()
    image.png

    3、文档

    文档是是MongoDB中的数据载体,是一种类似JSON格式的数据,在MongoDB中称之为BSON(Binary JSON),既然是一种类似JSON的格式,所以 BSON也是 key-value形式的,形如

    image.png

    3.1、创建文档

    在上一节中我们创建了集合(相当于是Mysql中的表),有了集合接下来我们就可以往集合里插入数据。插入数据的语法:db..insert(,)
    参数:

    参数类型说明
    collection字符串要插入的集合,如果不存在则会自动创建
    document文档或数组要插入到集合中的文档或文档数组。
    writeConcern文档可选。表达写关注的文档。省略以使用默认的写关注。请参阅写关注
    如果是在事务中运行,则请勿显式设置此操作的写关注。要将写关注与事务一起使用,请参阅事务和写关注。
    ordered布尔可选。如果为 true,则对数组中的文档执行有序插入,如果其中一个文档发生错误,MongoDB 将返回,而不处理数组中的其余文档。
    如果为 false,则执行无序插入,如果其中一个文档发生错误,则继续处理数组中的其余文档。
    默认值为 true

    示例:

    db.users.insert({
        name: {
            first: "Alan",
            last: "Turing"
        },
        birth: new Date('Jun 23, 1912'),
        death: new Date('Jun 07, 1954'),
        contribs: ["Turing machine", "Turing test", "Turingery"],
        views: NumberLong(1250000)
    })
    
    
    
    

    结果:
    image.png
    image.png

    与之类似的还有 db..insertOne(,)以及db..insertMany(,)。用法与上述基本一致,这里不在赘述。

    由于篇幅限制,先写到这里希望对你有所帮助。

    未完待续

  • 相关阅读:
    3D场景上的人体生成器【附有源码】
    【SpringBoot 】策略模式 之 一键切换文件上传方式
    关于this指向和react vue2 3 的diff--后续补充
    前端面试总结
    RabbitMQ学习笔记之Work Queues
    花式打印0~100中3的倍数
    leetcodeMysql练习记录(一)
    第八节:类和对象【二】【this引用和包】
    二叉树-输出二叉树的右视图
    2024中国人民大学计算机考研分析
  • 原文地址:https://blog.csdn.net/weixin_37624903/article/details/140444762