当前位置:首页 > 编程笔记 > 正文
已解决

MongoDB 学习笔记(基础)

来自网友在路上 158858提问 提问时间:2023-10-24 21:07:20阅读次数: 58

最佳答案 问答题库588位专家为你答疑解惑

概论

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

三高需求:

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

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

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

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

NoSQL (非关系型数据库)VS SQL(关系型数据库) MongoDB SQLDatabaseDatabaseTableCollectionRowDocumentColumnFieldKey-ValueField : FieldValueIndexIndex_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([<document_name1>, <document_name2>, ···], {writeConcern: <1|0>, ordered: <true|false>})更新文档
db.COLLECTION_NAME.update(<query>, <update>, {upset: <boolean>, multi: <boolean>, writeConcern: <document>})db.COLLECTION_NAME.save(<document>)删除文档
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()

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"MongoDB 学习笔记(基础)":http://eshow365.cn/6-23612-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!