MongoDB连接数据库

 
在操作 MongoDB 数据库之前我们需要先连接数据库,您可以使用 MongoDB shell 来连接 MongoDB,也可以使用 PHP、Java 等编程语言来连接 MongoDB,本节我们主要介绍一下使用 MongoDB shell 来连接 MongoDB。

在连接 MongoDB 之前,我们需要先启动 MongoDB,启动 MongoDB 的方式非常简单,您只需要在 MongoDB 安装目录下的 bin 目录中执行 mongo 命令即可。mongoDB 启动成功后会输出一些必要信息,然后等待建立连接,当连接成功后,则会打印一些日志信息,如下所示:

>mongo
MongoDB shell version v4.0.10
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("8e39fa3e-030f-419c-a84c-2969db730b90") }
MongoDB server version: 4.0.10
Server has startup warnings:
2021-02-05T11:22:11.458+0800 I CONTROL  [initandlisten]
2021-02-05T11:22:11.458+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2021-02-05T11:22:11.458+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2021-02-05T11:22:11.458+0800 I CONTROL  [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).

The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.

To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---

MongoDB 的标准 URI 连接语法如下所示:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

语法说明如下:
  • mongodb://:这是固定的格式,必须要指定;
  • username:password@:可选项,如果设置,在连接数据库服务器之后,驱动会尝试以给出的用户名(username)和密码(password)登录这个数据库;
  • host1:必填参数,用来指定要连接服务器的地址,如果要连接复制集,则需要指定多个主机地址;
  • portX:可选项,用来指定端口,如果不填,默认为 27017;
  • /database:可选项,如果指定了 username:password@,则连接并验证登录指定的数据库,若不指定,则默认打开 test 数据库;
  • ?options:可选项,用来定义连接选项,连接选项的可选值如下表所示,如果不使用 /database,则前面需要使用/与前面的内容分隔,所有连接选项都是键值对 name=value 的形式,键值对之间通过 & ;(分号)隔开。

选项 描述
connect=direct | replicaset
  • direct:直接建立一个到服务器的连接。如果指定了多个 host,将按先后顺序挨个尝试建立连接,直到连接建立成功为止。如果只指定了一个 host,则 direct 为默认值;
  • replicaset:使用 creplica set semantics 建立连接(即使只提供了一个 host),指定的 host 作为种子列表来查找完整的 replica set,当指定多个 host 时 replicaset 为默认值。
replicaSet=name 验证建立连接的 replica set 的名称,应用于 connect=replicaSet。
slaveOk=true | false
  • true:在 connect=direct 模式下,驱动会连接第一台机器,即使这台服务器不是主服务器。在 connect=replicaSet 模式下,驱动会发送所有的写请求到主服务器并且把读取操作分布在其他从服务器;
  • false:在 connect=direct 模式下,驱动会自动寻找主服务器. 在 connect=replicaSet 模式下,驱动仅会连接主服务器,并且所有的读写命令都会连接到主服务器。
safe=true | false
  • true:在执行更新操作之后,驱动都会发送 getLastError 命令来确保更新成功;
  • false:在每次更新之后,驱动不会发送 getLastError 来确保更新成功。
w=n w 代表 server 的数量(应用于 safe=true):
  • w=-1:不等待,不做异常检查;
  • w=0:不等待,只返回网络错误;
  • w=1:检查本机,并检查网络错误;
  • w>1:检查 w 个 server,并返回网络错误。
wtimeoutMS=ms 设置写操作的超时事件,应用于 safe=true。
fsync=true | false
设置是否等待刷新数据到磁盘,应用于 safe=true。
journal=true | false 如果设置为 true,则等待数据写入到日志并刷新到磁盘,应用于 safe=true。
connectTimeoutMS=ms 可以打开连接的时间。
socketTimeoutMS=ms 发送和接受 sockets 的时间。

下面通过一些简单的示例来演示一下:

连接到一个运行在本机的,端口为 27017 的 MongoDB:

mongodb://localhost

连接到一个运行在本机的,端口为 27017 的 MongoDB,并以用户名"fred"和密码"foobar"登录,登录后将默认使用 admin 数据库:

mongodb://fred:foobar@localhost

连接到一个运行在本机的,端口为 27017 的 MongoDB,并以用户名"fred"和密码"foobar"登录,登录后使用 baz 数据库:

mongodb://fred:foobar@localhost/baz

连接到一个 replica pair,一台服务器在 c.biancheng.net,另一台在 www.biancheng.net:

mongodb://c.biancheng.net:27017,www.biancheng.net:27017

连接到本机的一个 replica set,端口分别为 27017、27018、27019:

mongodb://localhost,localhost:27018,localhost:27019

连接 replica set 中的三台服务器, 写入操作应用在主服务器 并且分布查询到从服务器:

mongodb://host1,host2,host3/?slaveOk=true

直接连接第一个服务器,无论该服务器是否为 replica set 的一部分,也无论它是主服务器还是从服务器:

mongodb://host1,host2,host3/?connect=direct;slaveOk=true

注意:上述的连接主要用于在您偏好使用某台服务器,但又有可供替换的服务器时。

使用安全模式连接到 localhost:

mongodb://localhost/?safe=true

以安全模式连接到 replica set,并且等待至少两个复制服务器成功写入,超时时间设置为 2 秒:

mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000