MongoDB非常强大,同时也很容易上手。本文会介绍一些MongoDB的基本概念。
- 文档是MongoDB中数据的基本单元,非常类似于关系数据库管理系统中的行。
- 类似地,集合可以被看做没有模式的表。
- MongoDB自带简洁但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大。
- 每一个文档都有一个特殊的键“_id”,它在文档所处的集合中是唯一的。
文档
文档是MongoDB的核心概念。多个键及其关联的值有序地放置在一起便是文档。每种编程语言表示文档的方法不太一样。例如,在JavaScript中,文档表示为对象:
{greeting:"Hello, World!"}
- 文档中的键/值对是有序的。(但通常文档中的键的顺序并不重要)
- 文档中的值不仅可以是双引号里面的字符串,还可以是其他几种数据类型。
- 文档的键是字符串。键不能含有空字符、$、不要以”_”下划线开头,以下划线开头的键是保留的。
- MongoDB不但区分值的类型,也区分键的大小写。
集合
集合就是一组文档。如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。
无模式
集合是无模式的。这以为这一个集合里面的文档可以使各式各样的。
命名
我们可以通过名字来标识集合。
- 集合名不能是空字符串“”。
- 集合名不能含有空字符。
- 集合名不能以“system.”开头,这是为系统集合保留的前缀。例如,system.users这个集合保存着数据库的用户信息,system.namespace集合保留着所有数据库集合的信息。
- 用户创建的集合名字不能含有保留字$.
子集合
祖师集合的一种惯例是”.”字符分开按命名空间划分的子集合。
数据库
MongoDB中多个文档组成集合,同样多个集合可以组成数据库。和集合一样,数据库也通过名字来表示。
- 不能是空字符串
- 不能含有空格、”.”、$、/、\和空字符
- 应全部小写
- 最多64字节
启动MongoDB
MongoDB一般作为网络服务器来运行,客户端可以连接到服务器并执行操作。要启动该服务器,需要运行mongod可执行文件。
mongod在没有参数的情况下会使用默认数据目录/data/db,并使用27017端口。
MongoDB Shell
MongoDB自带一个JavaScript shell,可以从命令行与MongoDB实例交互。
运行shell
运行mongo启动shell。
shell会在启动时自动连接MongoDB服务器,所以要确保在使用shell之前启动mongod。
shell是功能完备的JavaScript解释器,可以运行任何JavaScript程序。还可以充分利用JavaScript标准库。比如:
x=200
200
x/5
40
Math.sin(Math.PI/2);
1
也可以定义和调用JavaScript函数。
注意,可以使用多行命令。
MongoDB客户端
虽然能运行任意JavaScript程序很酷,但shell的真正威力在于它是一个独立的MongoDB客户端。开启的时候,shell会连接到MongoDB服务器的test数据库,并将这个数据库连接赋值给全局变量db。这个变量是通过shell访问MongoDB的主要入口点。
可以通过db变量来访问其中的集合。例如db.baz返回当前数据库的baz集合。既然现在可以在shell中访问集合,那么基本上就可以执行几乎所有的数据库操作了。
shell中的基本操作
在shell查看操作数据会用到4个基本操作:创建、读取、更新和删除(CRUD)
创建
insert函数添加一个文档到集合里面。
读取
find会返回集合里面所有的文档。若只是想查看一个文档,可以用fineOne。find和findOne可以接受查询文档形式的限定条件。这将通过查询限制匹配的文档。
更新
如果要更新,就要用到update了。update接受两个参数:第一个是要更新文档的限定条件 ,第二个是新的文档。
删除
remove用来从数据库中永久地删除文档。在不适用参数进行调用的情况下,它会删除一个集合内所有的文档。它可以接受一个文档以指定限定条件。
使用shell的窍门
由于mongo是个JavaScript shell,通过在线查看JavaScript文档能获得很多帮助。shell本身内置了帮助文档,可以通过help命令查看。
使用db.help()可以查看数据库级别的命令的帮助,集合的相关帮助可以通过db.foo.help()来查看。
有个了解函数功用的技巧,就是在输入的时候不要输括号。这样就会显示该函数JavaScript源代码。