在操作 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]]
语法说明如下:
选项 | 描述 |
---|---|
connect=direct | replicaset |
|
replicaSet=name | 验证建立连接的 replica set 的名称,应用于 connect=replicaSet。 |
slaveOk=true | false |
|
safe=true | false |
|
w=n | w 代表 server 的数量(应用于 safe=true):
|
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,一台服务器在 www.cdsy.xyz,另一台在 hao.cdsy.xyz:
mongodb://www.cdsy.xyz:27017,hao.cdsy.xyz: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