数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
在MongoDB中可以创建数据库,如果你想使用MongoDB,创建数据库不是必要的。
"show dbs" 命令可以显示所有数据的列表。
[email protected]:~$ mongo MongoDB shell version: 2.0.4 connecting to: test > show dbs NewsDB 0.203125GB local (empty) >
执行 "db" 命令可以显示当前数据库对象或集合。
[email protected]:~$ mongo MongoDB shell version: 2.0.4 connecting to: test > db test >
运行"use"命令,可以连接到一个指定的数据库。
[email protected]:~$ mongo MongoDB shell version: 2.0.4 connecting to: test > db test > use NewsDB switched to db NewsDB > db NewsDB >
数据库名称可以是任何字符,但是不能包含空字符串,点号(.),或者" "。
"system" 作为系统保留字符串不能作为数据库名。
数据库名不能包含 "$"。
文档
文档是mongodb中的最核心的概念,是其核心单元,我们可以将文档类比成关系型数据库中的每一行数据。
多个键及其关联的值有序的放置在一起就是文档。在mongodb中使用一种类json的bson存储数据。
bson数据可以理解为在json的基础上添加了一些json中没有的数据类型。
如果我们会json,那么bson我们就已经掌握了一半了,至于新添加的数据类型后面我会介绍。
文档例子如所示,这个是我利用爬虫从网易新闻上抓下来的信息,存储到数据库中。
{ "_id" : ObjectId("557a46d86e530e0e770001e4"), "from_url" : "http://tech.163.com/", "news_body" : [ "6月3日-北京,第七届云计算大会期间,北京云端时代公司题为“新桌面 新生态 新价值”的2015桌面云生态链大会在国家会议中心成功召开。", "大会现场,云端时代总经理蒋建平先生以实际案例向现场嘉宾剖析了当前桌面云行业面临的共性问题及挑战,以及如何通过应用场景的归类及标准化、场景需求组合的标准化,安装部署的标准化、交付工具的标准化,携手生态链合作伙伴以“桌面云”的“工业4.0”思路来共同应对行业共性难题,提升企业IT价值。", "会上,云端时代总经理蒋建平先生提出的构建桌面云生态链,实现应用场景标准化、生态集成(产品认证和优化标准化)、产品形态集成标准化、部署集成标准化、设备上线标准化、资源扩展标准化等提法不仅令现场听众耳目一新,深受启发,而且受到生态链伙伴的一致认同。", "中科曙光、360、H3C、爱数软件、吉大正元作为云端时代桌面云生态链核心战略伙伴均派代表做了重要演讲并参与了圆桌论坛的讨论。上图从左到右分别是:曙光信息 云计算产品事业部总经理 何牧君,360 云安全事业部副总经理 张晓兵,H3C 市场部、解决方案部部长 王东海,吉大正元 副总经理 朱明达,爱数软件 产品副总裁 吴米香", "此外,来自云端时代桌面云生态链系统的多家IT厂商在现场也就“软件国产化”、“产业互联网”、“工业4.0”等热点议题展开了热烈讨论。", "会议现场布置了20个产品体验台,集中展示云端时代集成了生态链厂商产品的统一管理门户产品以及全系列云端软硬件一体产品。参会者可以动手操作,亲自体验云端时代桌面云产品的主要功能和性能模块。在产品演示过程和用户亲身体验过程中,云端时代的桌面云产品以其精美的图形设计、高清视频、优化的存储和复杂外设支持等重负载应用方面的卓越性和领先性,得到了用户们的肯定。" ], "news_from" : "网易科技报道", "news_thread" : "AR99BQAF00094P25", "news_time" : "2015-06-04 14:43:47", "news_title" : "2015云端时代桌面云生态链大会成功召开", "news_url" : "http://tech.163.com/15/0604/14/AR99BQAF00094P25.html" }
通常,"object(对象)" 术语是指一个文件。
文件类似于一个RDBMS的记录。
我们可以对集合(collection)进行插入,更新和删除操作。
下表将帮助您更容易理解Mongo中的一些概念:
RDBMS | MongoDB |
---|---|
Table(表) | Collection(集合) |
Column(栏) | Key(键) |
Value(值) | Value(值) |
Records / Rows(记录/列) | Document / Object(文档/对象) |
下表为MongoDB中常用的几种数据类型。
数据类型 | 描述 |
---|---|
string(字符串) | 可以是一个空字符串或者字符组合。 |
integer(整型) | 整数。 |
boolean(布尔型) | 逻辑值 True 或者 False。 |
double | 双精度浮点型 |
null | 不是0,也不是空。 |
array | 数组:一系列值 |
object | 对象型,程序中被使用的实体。可以是一个值,变量,函数,或者数据结构。 |
timestamp | timestamp存储为64为的值,只运行一个mongod时可以确保是唯一的。前32位保存的是UTC时间,单位是秒,后32为是在这一秒内的计数值,从0开始,每新建一个MongoTimestamp对象就加一。 |
Internationalized Strings | UTF-8 字符串。 |
Object IDs | 在mongodb中的文档需要使用唯一的关键字_id来标识他们。几乎每一个mongodb文档都使用_id字段作为第一个属性(在系统集合和定容量集合(capped collection)中有一些例外)。_id值可以是任何类型,最常见的做法是使用ObjectId类型。 |
集合
集合就是一组文档的组合。如果将文档类比成数据库中的行,那么集合就可以类比成数据库的表。
在mongodb中的集合是无模式的,也就是说集合中存储的文档的结构可以是不同的,比如下面的两个文档可以同时存入到一个集合中:
{"name":"jingdong"} {"Name":"jingdong","sex":"man"}
合法的集合名
集合名称必须以字母或下划线开头。
集合名可以保护数字
集合名称不能使美元符"$","$"是系统保留字符。
集合的名字 最大不能超过128个字符 。
另外,"."号的使用在集合当中是允许的,它们被成为子集合(Subcollection);比如你有一个blog集合,你可以使用blog.title,blog.content或者blog.author来帮组你更好地组织集合。
如下实例:
db.tutorials.php.findOne()
capped collections
Capped collections 就是固定大小的collection。有点环形队列的意思。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。
要注意的是指定的存储大小包含了数据库的头信息。
db.createCollection("mycoll", {capped:true, size:100000})
- 在capped collection中,你能添加新的对象。
- 能进行更新,然而,对象不会增加存储空间。如果增加,更新就会失败 。
- 数据库不允许进行删除。使用drop()方法删除collection所有的行。
- 注意: 删除之后,你必须显式的重新创建这个collection。
- 在32bit机器中,capped collection最大存储为1e9( 1X109)个字节。