开发者如何学好 MongoDB
作为一名研发,数据库是或多或少都会接触到的技术。 MongoDB 是当前火热的 NoSQL 之一,我们怎样才能学好 MongoDB 呢?本篇文章,我们将从以下几方面讨论这个话题:
MongoDB 是什么
我如何确定我需要学习 MongoDB
开发者应该掌握 MongoDB 的哪些知识
学习的选择和困境
我们先来了解一下,MongoDB 为何物。
NoSQL 泛指非关系型数据库,该词是关系型数据库(即 SQL)的相对称呼。MongoDB 是非关系型数据库(NoSQL)中较为人熟知的一种。
它拥有很多优秀特性,例如高性能、高可用、支持丰富的查询语句、无需预定义数据模型和水平可伸缩等,适合存储结构化、半结构化的文档和特定格式的文档,这些特性使它受到众多开发者的青睐。

我们通过几个例子来看看 MySQL 与 MongoDB 的差异。
与 MySQL 数据库不同的是,MongoDB 不需要预先定义表和字段,这正是它灵活性的体现。MongoDB 可以拥有多个数据库,每个数据库可以拥有多个集合,每个集合可以存储多份文档,这种关系与 SQL 数据库中的“数据库、表、数据”相当。下图描述了 MongoDB 中数据库、集合和文档的关系:
数据库 fotoo 中有两个集合,它们分别是 player 和 books。每个集合中都包含了许多文档,例如集合 books 中关于书籍《红楼梦》的文档,集合 player 中关于球员 James 的文档。
在查询方面,一个简单的 MySQL 查询语句为 SELECT * FROM tablename,对应的 MongoDB 查询语句为 db.tablename.find()。在面对多步骤的查询条件时,MongoDB 更游刃有余。例如:
“统计数据库 artic 中 score 大于 70 且小于 90 的文档数量”
这样的需求,用 MongoDB 的聚合操作就可以轻松完成,对应示例如下:
> db.artic.aggregate([
... {$match: {score: {$gt: 70, $lt: 90}}},
... {$group: {_id: null, number: {$sum: 1}}}
... ])
这个例子或许简单了些,在 MySQL 中我们可以用 count 和 where 完成,但如果复杂度再提高四五个等级呢?例如在此基础上增加对某个字段的运算、替换、排序、分组计数、增删字段,用 MySQL 来实现就会很头疼,而 MongoDB 的聚合可以让我们轻松地完成这类复杂需求。
我如何确定我需要学习 MongoDB
MongoDB 是近些年涌现的几十种 NoSQL 中第一梯队的成员,另外一个为人熟知的是 Redis。
你可能会有”我如何确定我需要学习 MongoDB 呢?“ 这样的疑问,面对这个问题,我们可以通过 MongoDB 的特点和应用场景着手:
MongoDB 适合存储结构确定或不确定的文档。例如爬虫爬取的信息常缺失字段的情况或字段参差不齐的情况;
对数据库可用性要求较高的情况。MySQL 这类数据库要做到负载均衡、自动容灾和数据同步需要借助外部工具,而 MongoDB 的复制集可以让我们轻松完成这一系列的工作。相对接借助第三方工具来说,复制集的稳定性更高。
分库分表是 WEB 开发中常用到的数据库优化手段,MySQL 的分库分表要考虑的问题非常多,例如字段冗余、数据组装跨节点分页、排序和数据迁移等,而 MongoDB 的分片可以让我们轻松完成“分库分表”的工作。MongoDB 的分片机制使我们不必将心思放在由“分库分表”带来的问题,而是专注于具体需求。
同样的,MySQL 的权限控制、定义数据模型、数据库备份和恢复等功能在 MongoDB 上也有。
MongoDB 中支持地理位置的存储和查询,这意味着 MongoDB 可以用于共享单车、共享雨伞、汽车定位等业务中。
我们常用的关系型数据库无法满足 WEB2.0 时代的需求,在实际应用中暴露了很多难以克服的问题。NoSQL 的产生就是为了解决例如海量数据的存储、弹性可伸缩和灵活性等方面的挑战,所以作为一名合格的开发者,应该抽空学习 SQL 以外的数据库知识。
开发者应该掌握 MongoDB 的哪些知识
学习前,我们需要明白自身定位:专业 DBA 或者日常开发使用。
MongoDB 有完善的体系和对应的认证考试,对于希望成为专业 DBA 的朋友我建议到 MongoDB 官方网站了解。
而对于仅需要满足日常开发需求的朋友,我建议学习的内容如下:
MongoDB 在各个平台的安装方法
MongoDB 数据库和集合的基本操作
MongoDB 文档 CRUD 操作,包括能够丰富 CRUD 的投影和修饰符等
MongoDB 流式聚合操作,这能够在数据库层面轻松完成复杂数据的处理,而不是用编程语言来处理
MongoDB 的数据模型,虽然 MongoDB 可以存储不规则的文档,但有些情况下定义数据模型可以提高查询效率
下图描述了一种聚合操作的完整过程:

当然,除了这些基本操作之外我们还可以学习更多的知识提高个人竞争力,这些知识是:
MongoDB 执行计划和索引,执行计划可以让我们清楚的了解到查询语句的效率,而索引则是优化查询效率的常用手段
MongoDB 的复制集,这是提高 MongoDB 可用性,保证数据服务不停机的最佳手段
MongoDB 的分片,分片能够在数据量变得庞大之后保证效率
MongoDB 的事物,如果你将 MongoDB 用于 WEB 网站,那么事物是你必须学习的知识
MongoDB 数据库备份和还原,有了复制集后,备份就显得不是那么重要了,但并不是没有这个需求。而且 MongoDB 的备份可以精细到文档,这就非常有意义了。
学习的选择和困境
有一定工作经验的开发者,大多数情况下都会选择自学。有些在网上搜索对应的文章,有些则直接翻阅官方文档。
我推荐的方式是翻阅官方文档,在遇到难以理解的观点时通过搜索引擎查找网友分享的文章。
自学的优点很多,缺点也很明显。例如:
断断续续的学习,难以保持专注导致知识吸收不好
耗费时间很长,虽然知道应该学习哪些方面的知识,但文档并不是按你所想而规划的,所以翻阅文档要费很多功夫
知识不成体系,东看看西看看,没有归纳容易忘记
学习就需要记笔记,这又是一件很费时间的事情
官方文档有些观点难以理解,卡在半路很难受
零星学了一两个月,也不确定学会了没有,内心毫无把握
如果不自学,就得找一些成体系的教程来帮助自己快速进步,少走弯路。知识付费时代,在条件允许的情况下适当地投入也是很好的选择。
但面对动辄几百的费用,不少开发者还是感觉略有压力,毕竟我们搬砖的经济压力也非常大。 考虑到这些问题,这里推荐韦世东的文章 《超高性价比的 MongoDB 零基础快速入门实战教程》,它售价不到 10 块钱。
文章作者韦世东是:图灵签约作者、电子工业出版社签约作者,华为云认证云享专家、掘金社区优秀作者、开源项目 aiowebsocket 作者。所以在文章质量上,大家可以放心。
这篇文章的内容几乎囊括了上面我们提到的所有知识点,看完这篇仅 5 万词的文章,你将收获:
文档的 CRUD 操作和 Cursor 对象
掌握流式聚合操作,轻松面对任何数据处理需求
了解 MongoDB 的查询效率和优化
如何提高 MongoDB 的可用性
如何应对数据服务故障
理解 MongoDB 的访问控制
学会用数据模型降低数据冗余,提高效率
掌握 mongodump 数据备份与还原方法
这样就可以胜任日常开发中对数据库操作能力的要求了。这篇文章适合对 MongoDB 感兴趣的零基础开发者或者有一定基础,想要继续巩固和加深学习的开发者。
文章篇幅很长,内容详尽,不乏优质配图,例如描述复制集节点关系的图:
描述节主点掉线,重新选举主节点的图
作者:夜幕奎因
开发者如何学好 MongoDB的更多相关文章
- mongodb 最佳实践
MongoDB功能预览:http://pan.baidu.com/s/1k2UfW MongoDB在赶集网的应用:http://pan.baidu.com/s/1bngxgLp MongoDB在京东的 ...
- MongoDB命令学习
mongodb不像关系型数据库有很强大的GUI客户端,虽然mongodb也有,但功能和稳定性实在不敢恭维,所以操作mongodb我们大部分 都是用类似cmd命令的方式(mongodb称为shell操作 ...
- Mongodb增加权限管理
前言: 随着列式存储理念的成熟,越来越多的开发者开始接纳mongodb,hbase这类大储存的分布式列式数据库.特别是mongodb的这种快速搭建,快速使用特点,使其得到更多人的青睐.本人主要通过官 ...
- 微信小游戏爆款秘笈 数据库MongoDB攻略篇
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB 发表于云+社区专栏 随着微信小游戏的爆发,越来越多开发者关注到MongoDB与小游戏业务的契合度. ...
- iOS开发技巧系列---详解KVC(我告诉你KVC的一切)
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
- 告诉你KVC的一切-b
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
- 深入浅出 JavaScript 关键词 -- this
深入浅出 JavaScript 关键词 -- this 要说 JavaScript 这门语言最容易让人困惑的知识点,this 关键词肯定算一个.JavaScript 语言面世多年,一直在进化完善,现在 ...
- 主流的Nosql数据库的对比
主流的Nosql数据库的对比 MongoDB,Cassandra,CouchDB,Hypertable, Redis,Riak,Neo4j,Hadoop HBase, Couchbase,Mem ...
- Linq研究
微软在.NET 3.5中加入了LINQ技术,作为配套改进了C#语言,加入了Lambda表达式,扩展方法,匿名类型等新特性用以支持LINQ.微软同时提出了要使用声明式编程,即描述计算规则,而不是描述计算 ...
随机推荐
- 基于Rancher搭建Kubernetes
基于Rancher搭建Kubernetes可以大大的简化安装的步骤,直接安装Kubernetes操作复杂并且容易出错. 转自 https://blog.csdn.net/u011142688/arti ...
- python——float()函数用法
float()函数是python中一个比较常用的内建函数,我们要详细掌握它的使用方法,避免在编写代码的过程中错误使用. float()函数返回一个十进制浮点型数值(小数). float()括号内只能是 ...
- dubbo监控安装
tar xf dubbo-monitor-simple-2.8.4-assembly.tar.gz cd dubbo-monitor-simple-2.8.4 vi conf/dubbo.proper ...
- 什么是ping通
ping这个命令是用来检测你的电脑和你所输入的IP地址127.0.01是否有数据通讯,以判断网络通不通的问题,执行这个命令也很简单,在开始——运行,输入ping 127.0.01,上面会出现一些数据, ...
- spring security 简单入门
spring security 简单入门示例 一.概述 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 . 其中最主要的安全操作有两 ...
- 一、netcore跨平台之 Linux上部署netcore和webapi
这几天闲着的时候在linux上部署了一下netcore webapi,下面就纪要一下这个过程. 中间遇到不少的坑,心里都是泪啊. 话不多说,开始干活. ------------------------ ...
- 在 Windows 上 安装 Oracle 11g Xe
去oracle官网下载 https://www.oracle.com/database/technologies/xe-prior-releases.html 点击下载: Oracle Databas ...
- three.js使用卷积法实现物体描边效果
法线延展法 网上使用法线延展法实现物体描边效果的文章比较多,这里不再描述. 但是这种方法有个缺点:当两个面的法线夹角差别较大时,两个面的描边无法完美连接.如下图所示: 卷积法 这里使用另一种方法卷积法 ...
- PHP抓取远程图片教程(包含不带后缀图片)
之前做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理.所以,后来将各种情况结合起来,封装成一个类,分享出来. 创建项目 作为演示,我们在www根目录创建项目 ...
- 【论文阅读】Diverse Image-to-Image Translation via Disentangled Representations(ECCV2018 oral)
目录 相关链接 方法亮点 相关工作 方法细节 实验结果 总结与收获 参考文献 相关链接: 论文:https://arxiv.org/abs/1808.00948 代码:https://github.c ...