前言

最近项目中计划引入MongoDB,全面替换Mysql。作为非关系型数据库,要替换关系型数据库,代码改动量不可小觑,并且由于没有实战经验,不免要踩一些坑。

在这里记录完整的学习和踩坑笔记,一来巩固自身理解、加深记忆,二来为后来者提供学习的平台。

当然传统上来说,使用非关系型数据库全面替换关系型数据库的操作并不可取,更合理的做法是将两者结合,传统业务使用关系型数据,类似日志、文件存储等增长规模很快的数据切换为非关系型数据库。

MongoDB是什么

MongoDB是一种面向文档的数据库数据库管理系统,用C++等语言撰写而成,官方支持的驱动有C,C++,C#,Java,PHP,Python,Go等,加上其他非官方的驱动,基本覆盖市面上的常用语言。

MongoDB将数据存储在类似JSON的文档中,并且文档中每个json串结构可能有所不同。

MangoDB可以在不定义结构(文档)的情况下创建记录,这被称为“动态模式”。

为什么要用MongoDB

MongoDB能够更快地构建应用程序,处理高度多样化的数据类型,更有效的管理应用程序。

其简化了开发,可以避免传统的ORM(对象关系映射),即将代码中的对象转换为关系表。

性能更强劲,这里贴一张知乎上的测试统计:

当然最重要的还是大厂都在用,同时为了拓展知识面。

基本概念

MongoDB中引入了全新的集合、文档机制,首次接触感觉晦涩难懂,但是如果将它和mysql的术语放到一起,就会变得比较容易接受。

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDb自动将_id字段设置为主键

下图实例,可以更直观了解:

安装

基础语法

以下内容将讲解连接、增删改查等语法。

标准URI连接语法

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • mongodb:// 这是固定的格式,必须要指定。
  • username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
  • host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
  • portX 可选的指定端口,如果不填,默认为27017
  • */database *如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
  • ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

参考资料

感谢以下资料对我的学习和文章的编写提供的不可或缺的帮助,以下排名不分先后。

维基百科-MongoDB

掘金-MongoDB快速入门

知乎-我为什么放弃MySQL?选择了MongoDB

掘金-MySQL 和 MongoDB 对比,一文看全

菜鸟教程-MandoDB