mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
mongodb也是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
目录
一、MongoDB简介
1.1 简介
mongodb是一个基于文档的强大、灵活、易于扩展的通用型数据库。是基于分布式文件存储的数据库。其由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。其主要特点如下:
(1)其使用文档来替代关系型数据库表的结构,每条数据不在要求其有无和一致性的类型。
(2)每个文档可以具备丰富的层次结构,而不是并列的属性数据。当然对于检索等情况下也不是很建议这样处理。
(3)使用横向扩展技术,面向文档的数据模型更易扩展。
(4)具备更加丰富、独特、易用的检索功能。
(5)基于内存的储存检索,性能更佳。
1.2 基本概念
数据库:
数据库和传统的关系型数据库差不多的概念,每个数据库含有多个集合,每个数据库最后会作为文件储存至服务器中,另外还有一些特殊的数据库进行了保留如下:
admin:类似于root数据库,如果将用户添加至admin数据库将获取所有数据库的权限,其中一些比如查找所有数据库、关闭服务器的服务端命令只能从这里运行。
local:存储当前服务器所有本地集合的数据库,永远不可以复制。
config:主要是存储分片等信息
集合(table):
相当于表结构,一个数据库下有多个集合。
但是与传统关系型数据库不同,关系型数据库譬如mysql,postgresql等都需要比较确切的表结构,但是对于MongoDB的集合,可以存储不同结构的数据,eg:
{"name":"张三","age":"15"}
{"name":"李四","age":16,"height":180}
{"title":"我的世界"}
对于上述数据都可以存储在一个集合里面,在该集合的上述三条数据,不仅仅是字段不同,连同一个字段age的数据类型都不同,这边是集合的动态扩展。虽然MongoDB支持该方式,但是作为开发还是建议将不同类型的数据分开到不同的集合之中更为稳妥:
首先,将各种类型的数据放到同一个数据库之中,后续进行管理查看的时候需要进行针对性的筛选很费劲;
其次,对于同名但是不同含义的字段检索存在歧义;
最后补充,在进行数据检索时,包括索引创建等,对于同一类数据进行操作更为快捷,其体现在索引创建上,进行检索时查找数据量级上等。
文档 (行数据)
文档则相当于传统关系型数据的行数据,对于集合中的介绍,我们基本也了解到了集合的结构并非是非常固定的结构,但是对于其中还是要注意,文档不能出现相同名称的属性。
主键
主键是MongoDB比较特殊的存在,一个mysql表可以不设置主键,但是对于MongoDB是一定会有一个唯一性的Id,你可以使用一个确定的Id值,也可以不进行设置,由MongoDB生成一个唯一的ObjectId作为Id。ObjectId作为的Id可以适配分布式的情况,具体详见官网介绍:ObjectId — MongoDB Manual