MongoDB学习

一、MongoDB介绍

MongoDB是一个分布式文件存储的非关系型数据库,它支持的数据结构非常松散,是类似json的bson格式。

MongoDB中的三个概念
  • 数据库:是一个仓库,在仓库中可以存放集合
  • 集合:集合类似于数组,在集合中可以存放文档
  • 文档:文档数据库中的最小单位,我们存储和操作的内容都是文档
文档

MongoDB中的记录便是一个文档(相当于mysql表中的一行数据),它是由字段和值对组成的数据结构,多个键值对存放在一起就构成了文档,文档中的键值对是有序的,bson键值对

使用文档的优点:

  1. 文档对应于许多编程语言中的本机数据类型
  2. 嵌入式文档和数组减少了对昂贵连接的需求
  3. 动态模式支持流畅的多态性
MongoDB的优点
  1. 灵活的数据模型:无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,支持动态查询和索引,可以支持更大的数据集
  2. 分布式扩展:MongoDB可以轻松的横向扩展,支持跨多个服务器分布数据,实现高可用性和负载均衡
  3. 大规模数据存储:MongoDB支持海量数据存储,提供非常高的性能和可扩展性
  4. 易于使用:MongoDB提供简易的命令行工具和可视化界面,支持多种编程语言,易于使用

二、基础命令

插入数据
  • db.集合名称.insert(JSON对象)
  • 插入1条数据:db.集合名称.insertOne(JSON对象)
  • 插入多条数据:db.集合名称.insertMany([JSON 1,JSON 2,JSON 3,...JSON n])
  • 指定_id参数:db.集合名称.insert({_id:"001", name:"gj", gender:1})

插入数据时不需要专门去创建集合(表),因为插入数据时会自动创建集合

简单查询
  • db.集合名称.find()
保存数据
  • db.集合名称.save(document)
修改数据
  • db.集合名称.update(<query> ,<update>,{multi: <boolean>})
  • 更新一条(字段全部替换):db.集合名称.update({name:'原始数据'},{name:'修改后数据'})
  • 更新一条(仅更新一个字段):db.集合名称.update({name:'原始数据'},{$set:{name:'修改后数据'}}) ,推荐使用
  • 更新全部:db.集合名称.update({name:'原始数据'},{$set:{name:'修改后数据'}},{multi:true})
  • 参数query:查询条件
  • 参数update:更新操作符
  • 参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
删除数据
  • db.集合名称.remove(<query>,{justOne: <boolean>})
  • 参数query:可选,删除的⽂档的条件
  • 参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条

三、聚合和管道

聚合是基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组,过滤等功能,然后经过一系列的处理,输出相应的结果。

语法格式db.集合名称.aggregate({管道:{表达式}})

常用的管道:
  • $group: 将集合中的⽂档分组, 可⽤于统计结果
  • $match: 过滤数据, 只输出符合条件的⽂档
  • $project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
  • $sort: 将输⼊⽂档排序后输出
  • $limit: 限制聚合管道返回的⽂档数
  • $skip: 跳过指定数量的⽂档, 并返回余下的⽂档
  • $unwind: 将数组类型的字段进⾏拆分
常用的表达式:
  • $sum: 计算总和, $sum:1 表示以⼀倍计数
  • $avg: 计算平均值
  • $min: 获取最⼩值
  • $max: 获取最⼤值
  • $push: 在结果⽂档中插⼊值到⼀个数组中
  • $first: 根据资源⽂档的排序获取第⼀个⽂档数据
  • $last: 根据资源⽂档的排序获取最后⼀个⽂档数据

四、索引

MongoDB中索引使用B+树结构,支持在MongoDB中高效的执行查询,索引存储特殊字段或一组字段的值,按字段值排序

  • 单字段索引:MongoDB 支持在文档的单个字段上创建用户定义的升序/降序索引
  • 复合索引:MongoDB还支持多个字段的用户定义索引,即复合索引
建立索引

db.集合名称.ensureIndex({字段名:1});其中 1 表示升序, -1 表示降序

删除索引:

db.集合名称.dropIndex({'索引名称'})

五、MongoDB数据压缩

借助WiredTiger存储引擎,MongoDB支持对所有集合和索引进行压缩,压缩以额外的CPU为代价最大限度地减少存储使用

snappy算法:压缩比3~5倍,对所有集合使用块压缩,对所有索引使用前缀压缩

zlib:高度压缩算法:压缩比5~7倍

Zstandard:快速无损压缩算法

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值