我叫MongoDb,不懂我的看完我的故事您就入门啦!

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第1张图片
这是mongo基础篇,后续会连续更新4篇

大家好我叫MongoDb,自从07年10月10gen团队把我带到这个世界来,我已经13岁多啦,现在越来越多的小伙伴在拥抱我,我很高兴。我是NoSQL大家族的一员,我是C++的亲儿子啦。为了大家更好的熟悉我,今天我先简单从简单的使用角度来介绍我自己。

首先还是先介绍一下我们的大家族NoSQL吧

NoSQL只是他简称,他的中文名叫 非关系型数据库,外文名叫Not Only SQL。他是对关系型数据库的一个补充(RDBMS)。RDBMS追求数据存储和查询的高度结构化、严格的数据一致性;NOSQL不在乎形式,重点关心效率,NOSQL是高性能、无模式、高可扩展的分布式数据库,NOSQL存储包括四种类型:键值对存储、列存储、文档存储、图形数据存储。NoSQL就简单介绍到这,这不是今天的重点,下面还是重点介绍一下我自己(MongoDb),呵呵!

MongoDb自我介绍

MongoDb是一个面向文档存储的键值对NOSQL数据库,是一个最接近关系型数据库的非关系数据库。在数据存储结构和查询上使用BJOSN(类似于JSON)结构,BJOSN支持多层机构,在具体的使用过程中,更像是操作Javascript脚本。正因为MongoDb的无模式化,在实际应用中变得更加灵活,易于扩展。与RDBMS一样,支持主键、索引、检索等操作,由于非结构化所以不支持join查询。

MongoDb的基本概念

具体的数据库安装就不在介绍了,网上一搜一大推。MongoDb采用BJON化的文档存储,所以其基本结构概念可以结合JSON联想一下:字段、文档、集合、数据库,这和RDBMS的属性、列、表、数据库是一一对应关系。下面以一个表格来对比说明一下:

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第2张图片

简单的一个表格显示还不够直观,那我们在来一张形象的图片来说明一下吧!

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第3张图片

用户权限管理

在生成环境数据库管理中,数据库权限是一个很重要的功能。在具体的权限上,需要针对全局的权限控制,需要精确到具体的数据的权限,在具体的权限分类上包括:读、读写、管理员等权限。下面列表介绍mongodb的内置权限:

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第4张图片

通过上面的表,我们可以得出:根据权限的作用范围上来看,权限分为了两大类权限:针对每一库的权限、针对全部数据库的权限。根据不同的权限分类,在赋值格式上也有一定差异,在具体的用户权限分配上,一个用户可以同时分配多个权限。

新增用户时权限初始化格式为:

针对全部数据库权限初始化命令格式:

db.createUser({user:"用户名",pwd:"密码",roles:["权限值"]})

针对指定数据库权限初始化命令格式:

db.createUser({user:"用户名",pwd:"密码",roles:[ {role:"权限值",db:"对应的数据库"},{role:"权限值",db:"对应的数据库"}….]})

这样说可能不怎么好理解,那么我们还是以实际工作的使用情况来举例说明。

条件假设:有3个数据库:testdb001、testdb002

需要给如用户分配对应的权限

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第5张图片

通过实际举例,应该对权限的新增初始化操作命令有了理解,那么下面我们就来对权限的根据新操作命令简单聊聊,其实根系和初始化具体的权限格式是一至的,具体如下:

针对全部数据库权限更新命令格式:

db.updateUser("被更新用户名",{pwd:"更新后的密码",roles:["权限值"]})

针对指定数据库权限更新命令格式:

db.updateUser("被更新用户名",{pwd:"更新后的密码",roles:[{role:"权限值",db:"对应的数据库"},{role:"权限值",db:"对应的数据库"}….]})

注意:updateUser的第二个参数有两个节点:pwd和roles。如果不需要更新某一节点的数据,那么直接不要该节点即可。

实例:继续上面的实例继续操作

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第6张图片

数据库(database)

具体的数据库概念和RDBMS一致,一个mongodb可以创建多个数据库,不同数据库也可以存储在不同的mongodb。系统的默认数据库包括:admin(存储用户权限相关)、config(配置信息)、local(日志信息)。针对数据库我们常用的操作包括:创建、删除。具体的实现如下:

创建:use 数据库名称

当数据库名称不存在时,系统自动创建(创建后不能显示,需要向里面插入数据才会显示),存在则切换。

删除:首先要切换到对于的数据库,然后在执行dropDatabase命令

use 被删除的数据库名称

db.dropDatabase()

集合(Collection)

集合是mongodb中对数据存储的一个分组,和关系数据库中的表是对应关系。集合中存储的文档数据的无固定格式,可以自由存储不同格式的bjson数据,但是在实际使用中,我们还是存储同一类型的bjson数据。集合的常见的操作命令如下:

创建集合:

db.createCollection(集合名称,集合规则),其中第二次参数为一个json数据,非必填,具体的参数节点为:

集合规则:{ capped :选填bool类型:设置改集合是否为一个固定集合,

true:代表固定集合,集合中的数据不可修改,与size配对使用,代表当集合达到指定大小后,会自动覆盖历史数据(最先添加的数据),

size:选填数字类型:指定集合的最大存储数据(字节数),当集合达到指定大小后,会自动覆盖历史数据(最先添加的数据) }

max: 选填数字类型:指定集合的最大存储的文档总个数,当文档个数大于max值时,会自动替换历史文档

}

collection删除:

db.集合名称.drop();

文档(Document)

文档就一组键值(key-value)对数据(一个BJON),具体的一个文档结构可以多层嵌套,不同文档间的数据结构可以不一样,并且相同节点的数据类型也可不一样,这是与RDBMS最大的区别所在,这也奠定了MongoDB的高可扩展性。其实简单的说就是一个一个的jon格式的数据。

文档常见的几个操作命令汇总:

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第7张图片

字段

字段就很好理解了,就是文档中的json数据的每一个节点。

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第8张图片

通过对mongodb的操作简单介绍,其实我们不难发现以下一些特性:

1.无论是对文档的增、删、改、查操作的参数一切皆json,在实际操作的时候,按照json方式来操作即可。

2.数据库和集合都可以在使用是自动创建:

2.1 use 切换数据库时,如果没有数据库自动创建;

2.2 db.集合.insert() 当集合不存在时,系统自动创建集合。

Mongodb的这一些特性用起来是不是很爽的感觉。下面从数据库的创建,到文档的整体操作流程写一些演示实例,来加深印象。

我叫MongoDb,不懂我的看完我的故事您就入门啦!_第9张图片

通过上面的实际操作,我们发现所有新增文档都会自动生成一个节点”_id”( ObjectId),该_id是mongodb系统自动生成的类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

1.前 4 个字节表示创建 unix 时间戳,格林尼治时间 UTC 时间,比北京时间晚了 8 个小时

2.接下来的 3 个字节是机器标识码

3.紧接的两个字节由进程 id 组成 PID

4.最后三个字节是随机数

image.png

当然_id也可以根据实际需要自定义赋值。

好了今天就先写到这,通过本篇文章对mongo有了一个初步的认识了解,下一篇文章,我们在一起详聊查询,mongo的查询还是有很多聊的。谢谢您的查看。
END

你可能感兴趣的:(mongodb,nosql,数据库)