• MongoDB 学习笔记(基础)


    概论

    出现背景:MongoDB 是文档型数据库,由于传统的关系型数据库(如 MySQL),在数据操作的“三高”需求以及应对 web 的网站需求面前显得有些吃力,在此环境下 MongoDB 出世了

    三高需求:

    (1) 对数据库高并发读写的需求。

    (2) 对海量数据的高效率存储和访问的需求。

    (3) 对数据库的高可扩展性和高可用性的需求。

    (MongoDB 是 NoSQL 中最像 SQL 的非关系型数据库)

    NoSQL (非关系型数据库)VS SQL(关系型数据库)
    MongoDB SQL
    DatabaseDatabase
    TableCollection
    RowDocument
    ColumnField
    Key-ValueField : FieldValue
    IndexIndex
    _ID(auto)ID
    多表连接嵌入文档

    (MongoDB 默认为每个文档设置了一个主键 _ID,默认下它是 Objectid 对象,它在集合中是唯一标识的) 

    MongoDB 有如下三个自带的数据库:

    1. admin 数据库:用于存储用户和角色等信息
    2. local 数据库:用来存储副本集的配置信息,数据不能被复制到其它节点
    3. config 数据库:在分片设置时存储分片的相关信息

    数据库自定义命名规范:不能为空或有特殊符合及以数字开头,且对大小写敏感,长度最多为 64B(如果用户不定义自己的数据库名称,则默认操作数据库名称为 test)

    MongoDB 支持的数据结构非常松散,其记录是一个文档(由键值对 field:value 组成),文档类似于 JSON 对象

    数据库管理

    1. 创建数据库(如果此数据库已存在则切换到指定数据库,而实际上只有向其插入文档时才会真正创建)
    2. use DATABASE_NAME
    3. 显示数据库
    4. show dbs
    5. 删除数据库
    6. db.dropDatabase()

    集合管理

    1. 创建集合
    2. db.createCollection(name, options)
    3. 查看集合
    4. show collections 或 show tables
    5. 删除集合
    6. db.COLLECTION_NAME.drop()

     创建集合的注释:

    • name:要创建的集合名称
    • options:可选项
      1. capped:是否是固定大小集合
      2. autoIndexId:是否自动在 _ID 键名上创建索引
      3. size:定义固定集合的大小,单位是 千字节(Kbytes)
      4. max:固定集合文档的最大数量

    文档管理 

    1. 插入文档
    2. db.COLLECTION_NAME.insert(document_name)
    3. 单插入文档
    4. db.COLLECTION_NAME.insertOne(document_name)
    5. 多插入文档
    6. db.COLLECTION_NAME.insertMany([<document_name1>, <document_name2>, ···], {writeConcern: <1|0>, ordered: <true|false>})
    7. 更新文档
    8. db.COLLECTION_NAME.update(<query>, <update>, {upset: <boolean>, multi: <boolean>, writeConcern: <document>})
    9. db.COLLECTION_NAME.save(<document>)
    10. 删除文档
    11. db.COLLECTION_NAME.remove()
    12. db.COLLECTION_NAME.deleteOne()
    13. db.COLLECITON_NAME.deleteMany()
    14. 查询文档
    15. db.COLLECTION_NAME.find()
    16. db.COLLECTION_NAME.find().pretty()
    17. 限定查询数量
    18. db.COLLECTION_NAME.find().limit(Num)
    19. 查询结果排序
    20. db.COLLECTION_NAME.find().sort({KEY:1|-1})

    多插入文档的注释:

    • writeConcern:指定写入策略,1 要求确认写,为 0 则不要求
    • ordered:指定是否按顺序写入,true 要求按顺序写入,为 false 则不要求

    更新文档的注释:

    • query:更新的条件/对象
    • update:更新的对象和更新的操作符
      1. {$set:{field:value}}    把文档中某个 field 的值设置为 value
      2. {$inc:{field:value}}    把文档中某个数值型的 field 增加一次 value 值
      3. {$unset:{field:0}}    删除某个 field
      4. {$push:{field:value}}    把 value 追加到数组 field 中,如果数组 field 不存在,则会自动插入一个数组类型
      5. {$addToSet:{field:value}}    加一个值到数组 field 中,而且只有当这个值在数组中不存在时才增加
      6. {$pull:{field:value}}    从数组 field 中删除一个等于 value 的值
      7. {$rename:{old_field_name:new_field_name}}    对 field 进行重命名
    • upsert:可选参数,如果不存在 update 的记录,是否插入新文档,true为插入,默认是false,不插入
    • multi:可选参数,默认是 false,只更新找到的第一条记录;如果这个参数为 true,就把按条件查出来的多条记录全部更新
    • writeConcern:可选参数,抛出异常的级别

    文档聚合

    db.COLLECTION_NAME.aggregate( [{$pipeline1}, {$pipeline2}, {$pipeline3}···] )

    其中的 $pipeline1 等都被称作管道命令

    1. $match:指定条件过滤
    2. $group:指定键分组
      • $sum:求和
      • $avg:平均
      • $min:最小值
      • $max:最大值
      • $push:将结果插到数组中,且去掉重复值
      • $addToSet:将结果插入到数组
      • $first:返回第一个文档数据
      • $last:返回最后一个文档数据
    3. $project:投影 
    4. $limit:限定
    5. $skip:跳过
    6. unwind:分解
    7. sort:排序

     MongoDB——》聚合查询(project、match、limit、skip、unwind、group、sort)_mongo match limit-CSDN博客

    文档索引

    db.COLLECTION_NAME.createIndex(keys, options)

    1. 查看索引
    2. db.COLLECTION_NAME.getIndexes()
    3. 查看索引大小
    4. db.COLLECTION_NAME.totalIndexSize()
    5. 删除指定索引
    6. db.COLLECTION_NAME.dropIndex("索引名称")
    7. 删除所有索引
    8. db.COLLECTION_NAME.dropIndexes()

  • 相关阅读:
    面试题: 字符串转整型 终结者
    OpenAI 首次开发者大会(GPT4全面开放,新模型,GPT 商店来了)
    开篇——初识云原生
    MyBatis系统学习(三)——动态SQL
    单片机IO口应用-独立按键控制LED以及控制LED灯闪烁
    嵌入式开发的常用软件、学习资源网站推荐
    RUM之SPA应用最佳可观测实践
    通过阅读源码解决项目难题:GToken替换JWT实现SSO单点登录
    slickEdit 2022 (v27.0.2)Ubuntu安装以及破解
    万字详解JVM,让你一文吃透
  • 原文地址:https://blog.csdn.net/2301_76632538/article/details/133964436