时间:2021-07-01 10:21:17 帮助过:32人阅读
MongOdb 基本概念: 1、文档是Mongodb中数据的基本单元,类于关系型数据库中的行。(但比行要复杂的多) 2、集合可以看出是没有字段属性的表。 3、Mongodb 的单个实列可以包含独立的多个数据库,每一个都有自己的集合和权限。 4、Mongodb 自带简洁但功能强大
MongOdb 基本概念:
1、文档是Mongodb中数据的基本单元,类似于关系型数据库中的行。(但比行要复杂的多)
2、集合可以看出是没有字段属性的表。
3、Mongodb 的单个实列可以包含独立的多个数据库,每一个都有自己的集合和权限。
4、Mongodb 自带简洁但功能强大的javasrcipt shell ,这个工具对于管理Mongodb实列和操作数据非常有用。
5、每一个文档都有一个特殊的键“_id”它在文档所处的集合是唯一。
如果我们会json,那么bson我们就已经掌握了一半了,至于新添加的数据类型后面我会介绍。
文档例子如下:
{ site : "w3cschool.cc" }
通常,"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类型。 |
集合是无模式的,这意味着一个集合里面的文档可以是各种各样的,下面两个文档可以存在同一个集合中:
{"Hello":"Refactor"}
{"Age":30}
注意,上面的文档不光是值的类型不同(字符串和整数),他们的键也是不一样的.因为集合里面可以放置任何文档,
那么就有一个问题:还有必要使用多个集合吗?要是没必要对各种文档划分模式,那么为什么还要使用多个结合呢?
理由如下:
1.把各种各样的文档都混在一个集合里面,开发者要么确保每次查询只返回需要的文档种类,要么让执行查询的
应用程序来处理所有不同类型的文档.如:查询博客文章,还要剔除那么包含有作者数据的文档
2.在一个集合里面查询特定类型的文档在速度上不划算,分开做多个集合要快的多.如:集合里面有个标注类型的键
要查询其值为"Refactor1","Refactor2"或"Refactor3"的文档,就会很慢,如果按照名字分割成3个集合的话,查询会
快的多(参见"子集合")
3.把同种类型的文档放在一个集合里,这样数据很集中.从只含有博客文章的集合里面查询几篇文章,会比从含有文章
和作者数据的集合里面查几篇文章少消耗磁盘寻道操作.
4.当创建索引的时候,文档会有附加的结构(尤其是有唯一索引的时候).索引是按照集合来定义的.把同种类型的文档
放在同一个集合里面.使索引更有效.
集合名称必须以字母或下划线开头。
集合名可以保护数字
集合名称不能使美元符"$","$"是系统保留字符。
集合的名字 最大不能超过128个字符 。
另外,"."号的使用在集合当中是允许的,它们被成为子集合(Subcollection);比如你有一个blog集合,你可以使用blog.title,blog.content或者blog.author来帮组你更好地组织集合。
如下实例:
db.tutorials.php.findOne()
Capped collections 就是固定大小的collection。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。
要注意的是指定的存储大小包含了数据库的头信息。
> db.createCollection("mycoll", {capped:true, size:100000})
重点注意:
把数据库的名字放在集合名前,得到就是集合的完全限定名,称为命名空间.如:如果在cms数据库中
使用blog.posts集合,那么这个集合的命名空间就是cms.blog.posts.命名空间不得超过121字节,
在实际应用中应该小于100字节.