• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MongoDB文档、集合、库基本操作

MongoDB 彭东稳 9年前 (2016-03-17) 25843次浏览 已收录 0个评论

一、基本概念

文档(document

文档是MongoDB中数据的基本单元,非常类似于关系数据库管理系统中的行,但比行要复杂的多。每一个文档都有一个特殊的键“_id”,它在文档所处的集合中是唯一的。

文档是MongoDB的核心概念,多个键及其关联的值有序地放置在一起便是文档。MongoDB以文档的形式存储数据,文档的存储格式是BSON。文档类似于编程语言类似结构存储键值对(如字典、哈希表、地图、和关联数组)。BSONBinary JSON 的简称,是一个JSON文档对象的二进制编码格式。BSONJSON一样支持往其它文档对象和数组中再插入文档对象和数组,同时扩展了JSON的数据类型。如:BSONDate类型和BinDate类型。BSON有三个特点:轻量性、可遍历性、高效性。文档的存储格式如下图:

MongoDB文档、集合、库基本操作

需要注意的是:

1)文档中的键/值对是有序的。

2)文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)

3MongoDB区分数据类型和大小写。

4MongoDB的文档不能有重复的键。

5)文档的键是字符串,除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:

1)键不能含有\0 (空字符)。这个字符用来表示键的结尾。

2.$有特别的意义,只有在特定环境下才能使用。

3)以下划线“_”开头的键是保留的(不是严格要求的)

集合(colletion

集合就是 MongoDB 文档组,类似于关系数据库管理系统中的表格,但是是没有模式的表,这也就意味着一个集合里面的文档可以各式各样的。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。集合的使用不需要像关系数据库那样需要提前创建表格式,集合插入文档时就会被自动创建。一个集合的逻辑存储图如下所示:

MongoDB文档、集合、库基本操作

集合是文档的容器,那么就需要有一个名称,有名称就有一定的规范,集合的命名规范如下:

  1. 集合名不能是空字符串“”
  2. 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
  3. 集合名不能以”system.”开头,这是为系统集合保留的前缀。
  4. 用户创建的集合名字不能含有保留字符,有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。 

虽然集合可以不需要提前创建,但也可以提前创建一个空集合,用来提前定义一些索引或约束:

MongoDB 的 db.createCollection(name,options) 方法用于在MongoDB 中创建集合。在命令中,name 是要创建的集合的名称。 options是一个文档,用于指定集合的配置。

options 参数是可选的,因此只需要指定集合的名称。 以下是可以使用的选项列表:

字段 类型 描述
capped Boolean (可选)如果为 true,则启用封闭的集合。上限集合是固定大小的集合,它在达到其最大大小时自动覆盖其最旧的条目。 如果指定 true,则还需要指定 size 参数。
autoIndexId Boolean (可选)如果为 true,则在 _id 字段上自动创建索引。默认值为 false。
size 数字 (可选)指定上限集合的最大大小(以字节为单位)。 如果 capped 为 true,那么还需要指定此字段的值。
max 数字 (可选)指定上限集合中允许的最大文档数。

在插入文档时,MongoDB 首先检查上限集合 capped 字段的大小,然后检查 max 字段。

数据库(database

数据库的概念跟关系型中是一样的,MongoDB中多个文档组成集合,同样多个集合可以组成一个数据库。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,即便是在磁盘上,不同的数据库也放置在不同的文件中。不同的是MongoDB不需要提前建立数据库。

运行“use”命令,可以连接到一个指定的数据库

命令“use”可以用来连接一个指定的数据库,但是如果数据库不存在,那么“use”命令则创建数据库。

执行 “show tables” 命令可以显示数据库集合

执行 “db” 命令可以显示当前数据库

执行“show dbs”命令可以显示所有数据库

可以看到,我们刚刚创建的数据库dbtest并不在数据库列表中,要显示它,我们需要向dbtest数据库中插入一些数据。

可以看到dbtest数据库以及创建好了,那么如果想要删除数据库可以使用db.dropDatabase()方法,默认db.dropDatabase()是删除当前数据库,所以我们需要先使用命令“use”切换到需要删除的数据库中。

数据库也通过名字来标识,数据库名可以是满足以下条件的任意UTF-8字符串。

1)不能是空字符串(“”)

2)不得含有‘ ‘(空格).$/\\0 (空宇符)

3)应全部小写。

4)最多64字节。

复制数据库

PS:MongoDB中不提供修改库名,所以只有通过复制库来重命名。

特殊作用的数据库

admim

从权限的角度来看,这是“root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

local

这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

config

MongoDB用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

把数据库的名字放到集合名前面,得到就是集合的完全限定名,称为命名空间。例如,如果你在cms数据库中使用blog.posts集合,那么这个集合的命名空间就是cms.blog.posts。命令空间的长度不得超过121字节,在实际使用中应该小于100字节。

二、mongo shell

MongoDB自带了一个javascript shell,可以从命令行与MongoDB实例交互。这个Shell非常有用,通过它可以执行管理操作、检查运行实例等。

1. 运行Mongo Shell

Shell会在启动时自动连接MongoDB服务器,所以要确保在使用Shell之前启动mongod服务。Shell是功能完备的javascript解释器,可以运行任何javascript程序。为了证明这一点,我们运行几个简单的数学运算:

除了算术运算之外,还可以充分利用javascript的标准库,也可以定义和调用javascript函数。

2. MongoDB客户端

mongo shell虽然能运行任意javascript程序,但shell的真正威力还在于他是一个独立的mongodb客户端。开启的时候,shell会连接到mongodb服务器的test数据库,并将这个数据库连接赋值给全局变量db。这个变量时通过shell访问mongodb的主要入口点。

Shell还有些非javascript语法的扩展,是为了方便习惯于SQL的用户而添加的。这些扩展并不是提供额外的功能,但它们是很棒的语法,例如“use”命令选择数据库:

3Shell帮助

由于mongo是个javascript shell,通过在线查看javascript的文档能获得很多帮助。Shell本身内置了帮助文档,可以通过help命令查看。

使用db.help()可以查看数据库级别的命令的帮助,集合的相关帮助可以通过db.foo.help()来查看。另外有个了解函数功用的技巧,就是在输入的时候不要输括号,这样就会显示该函数的javascript源代码。例如,如果想看看update的原理,可以这么做:


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (1)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!