MongoDB是一个文档数据库,它以JSON为数据模型,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储方案。
MongoDB支持的数据结构非常松散,其数据格式是BSON,即Binary JSON,BSON是类似于JSON的二进制形式的存储格式,同JSON一样可以支持内嵌式的文档对象和数组对象,也因此可以存储较为复杂的数据类型。
MongoDB最大的特点是其支持的查询语言非常强大,其语法类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大功能,且还支持对数据建立索引。原则上,Oracle 和 MySQL 能做的事情,MongoDB 都能做到(包括ACID事务)。
在数据库排行榜上,MongoDB仅次于Oracle、MySQL、SQL Server以及PostgreSQL,在NoSQL中排名首位。
MongoDB和关系型数据库的概念有许多相似之处:
| RDBMS | MongoDB |
|---|---|
| 数据库(db) | 数据库(db) |
| 表(table) | 集合(collection) |
| 行(row) | 文档(doc) |
| 列(column) | 字段(field) |
| 主键(primary key) | _id |
| 索引(index) | 索引(index) |
| 视图(view) | 视图(view) |
| 表连接(join) | 聚合操作($lookup) |
在非关系型数据库中,MongoDB的功能最为丰富,且最接近于关系型数据库,但仍存在不少差异:
MongoDB具有很明显的半结构化特点。
在一个集合中,文档所拥有的字段并不需要是相同的,而且也不需要对所用的字段进行声明。除了松散的表结构,文档还可以支持多级嵌套、数组等灵活的数据类型,因此非常契合面向对象的编程模型。
弱关系。
MongoDB没有外键的约束,也没有非常强大的表连接能力,类似功能需要依靠聚合管道技术来弥补。
没有哪个业务场景必须要使用MongoDB才能解决,但使用MongoDB通常能让你以更低的成本解决问题