MongoDB是一个数据库引擎,提供对非关系,面向文档的数据库的访问。 增长最快的NoSQL之一,旨在提供传统关系数据库管理系统(RDBMS)的替代方案。 除了无模式设计和可扩展架构之外,MongoDB还提供JSON输出和特定的语言特定绑定,使其特别适合在自定义应用程序开发中使用。 MongoDB已经用于许多大规模生产部署,并且是目前所有系统中最流行的数据库引擎之一。
从Ubuntu存储库安装MongoDB:
MongoDB的配置文件位于/etc/mongodb.conf。 大多数设置都在文件中有很好的注释,我们在下面列出了一些更重要的选项:
dbpath表示存储数据库文件的位置(默认为/var/lib/mongodb)
logpath表示MongoDB的日志所在的位置(默认为/var/log/mongodb/mongodb.log)
logappend指示是否将新条目附加到日志的结尾,而不是在每次MongoDB重新启动后覆盖现有日志条目
bind_ip指定MongoDB应侦听的IP地址。 通常建议将此默认设置为127.0.0.1(localhost),除非您有特定的理由将其托管到公共互联网。 这里指定0.0.0.0将导致MongoDB在所有网络接口上侦听。
port指定默认网络端口27017,可以取消注释和修改
默认情况下,当注释掉或未明确定义auth时将禁用认证。 要利用MongoDB的内部身份验证功能,请通过删除行开头处的#,并将值设置为true来取消注释auth选项。
对MongoDB配置文件进行更改后,请重新启动服务,如下一节所示。
要启动,重新启动或停止MongoDB服务,请从以下选项中执行适当的命令:
如果在“配置MongoDB”小节中启用了认证,请在数据库上创建一个管理员:
1.运行mongodb命令打开shell:
2.默认情况下,MongoDB连接到一个名为test的数据库。 在添加任何用户之前,创建数据库以存储用于验证的用户数据:
3.使用以下命令创建能够在任何数据库上创建其他用户的管理用户。
将这些凭证保存在安全的地方,以备将来参考。 输出将显示写入数据库的所有信息,密码除外:
Successfully added user: {
“user” : “mongo-admin”,
“roles” : [
{
“role” : “userAdminAnyDatabase”,
“db” : “admin”
}
]
}
4.退出mongo终端
5.使用在步骤3中创建的凭据,使用admin数据库进行身份验证来测试与MongoDB的连接:
为了验证与shell的连接,需要上述命令中的-u和-p –authenticationDatabase选项。 没有身份验证,MongoDB shell可以被访问,但它不允许连接到数据库。
在步骤3中创建的mongo-admin用户纯粹是基于指定的角色的管理。 它被定义为所有数据库的用户管理员,但本身没有任何数据库权限。 您可以使用它来创建其他用户并定义他们的角色。 如果您使用多个应用程序与MongoDB,设置不同的用户具有对应的数据库的自定义权限。
6.作为mongo-admin用户,创建一个新的数据库来存储常规用户数据进行身份验证。 以下示例为user-data:
不同数据库的权限在单独的角色对象中处理。 步骤7中的示例创建了用户example-user,对用户数据数据库具有只读权限,并且对我们将在下面的基本MongoDB函数部分中创建的示例数据库数据库具有读写权限。
7.创建新的非管理用户以输入测试数据。
MongoDB之所以欢迎大多数得益于易于集成。 通过JavaScript函数与数据库进行交互,并提供其他语言的驱动程序。 本节将演示一些基本功能,但我们建议您根据特定的用例进行进一步的研究。
1.使用我们上面创建的example-user打开MongoDB shell:
2.创建新数据库example-db:
请确保此数据库名称对应于用户具有读取和写入权限的数据库名称。
要显示当前工作数据库的名称,请运行db命令。
3.创建用于输入测试数据库的样本数据。 MongoDB接受输入为JSON对象形式的文档,如下面的那些。 a和b变量用于简化输入; 对象也可以通过函数直接插入。
4.使用insert函数将数据插入到名为example的集合中。 如果您不熟悉MongoDB术语,则可以将集合视为与关系数据库管理系统中的表。
每个操作的输出将显示成功写入当前工作数据库的对象数:
5.确认example集合已经被创建
输出将列出包含当前工作数据库中的数据的所有集合:
在这种情况下,example是我们创建的集合,而system.indexes是一个自动创建的索引集合,供MongoDB内部使用。
6.使用find函数查看example集合中的所有数据。 此函数还可用于通过输入搜索项参数来搜索特定字段:
输出将类似于以下内容:
{ “_id” : ObjectId(“571a3e7507d0fcd78baef08f”), “name” : “John Doe” }
{ “_id” : ObjectId(“571a3e8707d0fcd78baef090”), “age” : 30 }