MongoDB002 文档、集合、数据库

文档是MongoDB中数据的基本单元,类似于关系数据库管理系统中的行。
集合可以被看做是没有模式的表。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限
MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
每个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的。


文档
定义
:文档是MongoDB的核心概念。多个键及其关联的值有序地放置在一起便是文档。每种编程语言表示文档的方法不太一样,但大多数编程语言都有相通的一种数据结构,比如映射、散列或字典。
示例:在JavaScript里面,文档表示为对象: {"greeting":"Hello,world!"},这个文档只有一个键"greeting",其对应的值为"Hello, world!"。绝大多数情况下,文档会比这个简单的例子复杂得多,经常会包含多个键/值对:{"greeting":"Hello,world!","foo":3} 
概念:1.文档中的键/值对是有序的,{"greeting":"Hello,world!","foo":3}和{"foo":3,"greeting":"Hello,world!"}是完全不同的。
     2.类型区分 文档中的值不仅可以在双引号里面的字符串,还可以是其他几种数据类型。上例中的"greeting"的值是个字符串,而"foo"的值是个整数。 {"foo":3}和{"foo":"3"}是不同的。
     3.大小写区分。{"foo":3}和{"Foo":3}是不同的
     4.键不允许重复{"greeting":"Hello,world!","greeting":"Hello MongoDB!"}是非法
     5.键的命名约束 文档中的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。注意:(1)键不能含有\0(空字符).这个字符用来表示键的结尾(2).和$有特别的意义,只有在特定环境下才能使用,后面的章节会详细说明。通常来说就是被保留了,使用不当的话,驱动程序会(3)以下划线"_"开头的键是保留的,虽然这个并不是严格要求的。


集合
集合就是一组文档。如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。
无模式:集合是无模式的。这意味着一个集合里面的文档可以是各式各样的。例如,下面两个文档可以存在于同一个集合里面:{"greeting":"Hello,world!"} {"foo":5}注意:上面的文档不光是值的类型不同(字符串和整数), 它们的键也是完全不一样的。因为集合里面可以放置任何文档,随之面来的一个问题是:"还有必要使用多个集合吗"?把杂乱的文档全放在一个集合,会严重影响索引的查询速率,这与使用mongoDB的初衷是相违背的。
命名:集合名需要满足以下条件
     1.集合名不能是空字符串""
     2.集合名不能含有\0字符(空字符),这个字符表示集合名的结尾
     3.集合名不能以"system."开头,这是为系统集合保留的前缀。例如system.users这个集合保存着数据库的用户信息,system.namespaces集合保存着所有数据库集合的信息
     4.用户创建的集合名字不能含 有保留字符$。有些驱动程序的确支持在集合名里面包含$,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。
子集合:组织集合的一种惯例是使用"."字符分开的按命名空间划分的子集合。例如,一个带有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors。这样做的目的只是为了使组织结构更好些,也就是说blog这个集合(这里根本就不需要存在)及其子集合没有任何关系. 在MongoDB中使用子集合来组织数据是很好的方法,在此强烈推荐。




数据库
MongoDB中多个文档组成集合,同样多个集合可以组成数据库.一个MongoDB实例可以承载多个数据库,它们可视为完全独立的。每个数据库都有独立的权限控制,即使在磁盘上,不同的数据库也旋转不同的文件中。将一个应用的所有数据都存储在同一个数据库中的做法就很好。要想在同一个MongoDB服务器上存放多个应用或者用户的数据,就要使用不同的数据库了。
和集合一样,数据库也通过名字来标识.数据库名可以满足以下条件的任意UTF-8字符串.满足:
        1.不能是空字符串("")
2.不得含有''(空格)、 .、$、/、\、\0(空字符)
3.应全部小写
        4.最多64字节
要记住一点,数据库名最终会变成文件系统里的文件,这也就是有如此多限制的原因.


有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。这些数据库如下。
1. admin 从权限的角度来看, 这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
2. local 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
3. config 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息


把数据库的名字放到集合名前面,得到就是集合的完全限定名,称为命名空间。如果你在cms数据库中使用blog.posts集合,那么这个集合的命名空间就是cms.blog.posts。命名空间的长度不得超过121字节,在实际使用当中应该小于100字节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值