MongoDB 学习笔记(基础)

概论

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

三高需求:

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

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

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

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

NoSQL (非关系型数据库)VS SQL(关系型数据库)
MongoDB  SQL
Database Database
Table Collection
Row Document
Column Field
Key-Value Field : FieldValue
Index Index
_ID(auto) ID
多表连接 嵌入文档

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

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

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

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

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

数据库管理

创建数据库(如果此数据库已存在则切换到指定数据库,而实际上只有向其插入文档时才会真正创建)
use DATABASE_NAME

显示数据库
show dbs

删除数据库
db.dropDatabase()

集合管理

创建集合
db.createCollection(name, options)

查看集合
show collections 或 show tables

删除集合
db.COLLECTION_NAME.drop()

 创建集合的注释:

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

文档管理 

插入文档
db.COLLECTION_NAME.insert(document_name)

单插入文档
db.COLLECTION_NAME.insertOne(document_name)

多插入文档
db.COLLECTION_NAME.insertMany([, , ···], {writeConcern: <1|0>, ordered: })

更新文档
db.COLLECTION_NAME.update(, , {upset: , multi: , writeConcern: })

db.COLLECTION_NAME.save()

删除文档
db.COLLECTION_NAME.remove()

db.COLLECTION_NAME.deleteOne()

db.COLLECITON_NAME.deleteMany()

查询文档
db.COLLECTION_NAME.find()

db.COLLECTION_NAME.find().pretty()

限定查询数量
db.COLLECTION_NAME.find().limit(Num)

查询结果排序
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)

查看索引
db.COLLECTION_NAME.getIndexes()

查看索引大小
db.COLLECTION_NAME.totalIndexSize()

删除指定索引
db.COLLECTION_NAME.dropIndex("索引名称")

删除所有索引
db.COLLECTION_NAME.dropIndexes()

你可能感兴趣的:(学习,笔记)