设为首页 加入收藏

TOP

MongoDB入门学习(二):MongoDB的基本概念和数据类型(一)
2015-07-24 10:23:59 来源: 作者: 【 】 浏览:0
Tags:MongoDB 入门 学习 基本 概念 数据 类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下。

1.文档

文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构。对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数。每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都是差不多的,一个键对应一个值。相对于MySQL而言,MongoDB的文档就相当于MySQL表中的一行数据。

写法1
>db.people.insert({"name" : "Mary", "age" : 10})
写法2
>person1 = {"name" : "Mary", "age" : 10}
>db.people.insert(person1)

上面这两种写法是一样的,都是将一个文档插入到数据库的people集合中。只是第二种写法用了一个变量person1来表示这个要插入的文档。

文档中键值对是有序的,下面这两个文档是不一样的:

doc1 = {"name" : "Mary", "age" : 10}
doc2 = {"age" : 10, "name" : "Mary"}

文档的键必须是字符串类型,但是值可以是很多的类型,这个后面会说到。而且文档是区分大小写的,name键和Name键是有区别的。文档中的键必须是唯一的。

2.集合

上面说到people集合,MongoDB的集合就相当于MySQL的一个表table,MongoDB列出所有的集合可以是show tables,也可以是show collections。集合是一组文档,而且是无模式的,一个集合中的文档可以是各式各样的:

db.people.insert({"name" : "Mary", "age" : 10})
db.people.insert({"country" : "USA", "languge" : "english"})

如上面给people集合中插入了两个文档,但是这两个文档是完全不同的,键都不一样,这样的话,那不是所有的文档都可以放在一个集合中,确实是这样的,但是这样确实是有问题的,当集合大到一定程度的时候速率就会变的很慢,而且查询效率非常低,而且对于管理方面是非常复杂的,所以我们也要为数据库划分不同的集合。

上一篇看到了很多的集合,people啊,system.indexes啊,system.users啊等,集合的命名也有一定的限制的,首先不能为空"",也不能含有空字符,不能有保留字符$,system开头的就更不行了,这个是未系统集合保留的前缀。我们只要用一些很普通易懂的命名就好了,对于我们自己的管理和操作也是很简单的。

MongoDB还有一个子集合的概念,就是一个集合包含几个集合,这样也是便于管理,比如上面将people的基本信息和国籍信息这样放在一个people集合中有点勉强,可以直接写成一个文档放进去,也可以用两个子集合,一个表示基本信息baseinfo,一个表示国籍信息countryinfo:

db.people.baseinfo.insert({"name" : "Mary", "age" : 10})
db.people.countryinfo.insert("country" : "USA", "languge" : "english")

这个例子有点牵强,但是这样也容易理解。从上面可以看出,我们还没有创建people这样一个集合就可以直接insert,这样对于使用MySQL的人来说有点难以理解,表都没创建就给它插入数据,更离谱的是我们数据库都没创建,就可以直接使用任何数据库use anyDatabase:

> show dbs
admin   0.078GB
dhh_tp  0.078GB
local   0.078GB
test    0.078GB
> use temple
switched to db temple
>db
temple
> show collections
> db.people.insert({"name" : "Mary", "age" : 10})
WriteResult({ "nInserted" : 1 })
> show tables
people
system.indexes
> db.people.find()
{ "_id" : ObjectId("539137ce90c0386ead60e4f4"), "name" : "Mary", "age" : 10 }

看吧,show dbs查看所有的数据库,里面根本就没有temple,但是在直接使用的时候却不会报错,用db查看使用的哪个数据库的时候也确实是使用的temple,show collections查看所有的集合的时候一个集合都没有,因为这个数据库都不存在,哪来的表。然后直接给people集合中插入数据也不会报错,事后查询发现生成了people集合,而且还有个system.indexes集合,数据也确实插进了people集合,system.indexes存储的是集合中的索引,这个以后说。MongoDB会在插入数据的时候检查有没有这样一个数据库这样一个集合,如果不存在的话会自动创建,就不用我们自己创建集合,还要定义那么多的字段,字段的数据类型,长度以及能否为空,唯一键等等,非常的方便实用。

3.数据库

MongoDB中多个文档组成一个集合,那么多个集合就组成一个数据库,比如上面people和system.indexes组成temple数据库。MongoDB中每个数据库之间是相互独立的,都有独立的权限,而且都是存放在不同的文件中的。

MongoDB数据库的命名也有一定的限制的,不能有空格或者空字符,也不能包括特殊符号,应该全部小写,最多64字节,一点很重要,数据库名最终会变成系统中的文件的,你可以打开data/db来看一下,里面就会有和你数据库一样名字的文件,它们里面就是数据库的数据,数据库的命名也应该是普通的易懂的。而且不能使用某些名字,比如admin,这是root数据库不用多说,local,这个数据库是不能被复制的,以后说,config,和分片有关的,这几个都是保留的数据库名。

启动MongoDB服务器上一篇也介绍过了。启动MongoDB客户端上一篇也说过,执行mongo指定选项就可以了,在这里可以执行任何java script程序,也可以对数据库进行一般的操作,增insert删remove查find改update之类的,这个后面会说到的。也有删除集合和数据库的命令:

> show tables
people
system.indexes
> db.people.drop()
true
> show tables
system.indexes
> use temple
switched to db temple
> db
temple
> db.dropDatabase()
{ "dropped" : "temple", "ok" : 1 }
> show dbs
admin   0.078GB
dhh_tp  0.078GB
local
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇笔试面试那件小事(数据库概念知.. 下一篇Dropgoldengate用户时报ORA-00604..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)