第8章 MongoDB - 连接教程
在本教程咱们将讨论 MongoDB 的不同连接方式。
启动 MongoDB 服务
在前面的教程中,咱们已经讨论了如何启动 MongoDB 服务,帅哥只需要在 MongoDB install 目录的 bin 目录下执行 mongodb 即可。
执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。
帅哥可以使用 MongoDB shell 来连接 MongoDB server 。帅哥也可以使用 PHP 来连接 MongoDB。本教程咱们会使用 MongoDB shell 来连接 Mongodb 服务,之后的章节咱们将会介绍如何通过php 来连接MongoDB服务。
标准 URI 连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// 这是固定的格式,必须要指定。
- username:password@ 非必输项,如果设置,在连接databaseserver 之后,驱动都会尝试登录这个database
- host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接server 的地址。如果要连接复制集,请指定多个主机地址。
- portX 非必输的指定端口,如果不填,默认为27017
- /database 如果指定username:password@,连接并验证登录指定database。若不指定,默认打开 test database。
- ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
标准的连接格式包含了多个选项(options),请在输出结果查看
选项 | 描述 |
replicaSet=name | 验证replica set的名称。 Impliesconnect=replicaSet. |
slaveOk=true|false |
|
safe=true|false |
|
w=n | 驱动添加 { w : n } 到getLastError命令. 应用于safe=true。 |
wtimeoutMS=ms | 驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true. |
fsync=true|false |
|
journal=true|false | 如果设置为 true, 同步到 journal (在提交到database前写入到实体中). 应用于 safe=true |
connectTimeoutMS=ms | 可以打开连接的时间。 |
socketTimeoutMS=ms | 发送和接受sockets的时间。 |
实例
使用默认端口来连接 MongoDB 的服务。
mongodb://localhost
通过 shell 连接 MongoDB 服务:
$ ./mongo
MongoDB shell version: 4.0.9
connecting to: test
...
这时候帅哥return 查看运行 ./mongod 命令的窗口,可以看到是从哪里连接到MongoDB的server ,可以看到如下信息:
……省略信息……
2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] allocator: tcmalloc
2015-09-25T17:22:27.336+0800 I CONTROL [initandlisten] options: { storage: { dbPath: "/data/db" } }
2015-09-25T17:22:27.350+0800 I NETWORK [initandlisten] waiting for connections on port 27017
2015-09-25T17:22:36.012+0800 I NETWORK [initandlisten] connection accepted from 127.0.0.1:37310 #1 (1 connection now open) # 该行表明一个来自本机的连接
……省略信息……
MongoDB 连接命令格式
使用用户名和password 连接到 MongoDB server ,帅哥必须使用 ‘username:password@hostname/dbname’ 格式,'username’为用户名,‘password’ 为password 。
使用用户名和password 连接登录到默认database:
$ ./mongo
MongoDB shell version: 4.0.9
connecting to: test
使用用户 admin 使用password 123456 连接到本地的 MongoDB 服务上。输出结果请在输出结果查看
> mongodb://admin:123456@localhost/
...
使用用户名和password 连接登录到指定database,格式如下:
mongodb://admin:123456@localhost/test
更多连接实例
连接本地databaseserver ,端口是默认的。
mongodb://localhost
使用用户名fred,password foobar登录localhost的admindatabase。
mongodb://fred:foobar@localhost
使用用户名fred,password foobar登录localhost的bazdatabase。
mongodb://fred:foobar@localhost/baz
连接 replica pair, server 1为example1.netserver 2为example2。
mongodb://example1.net:27017,example2.net:27017
连接 replica set 三台server (端口 27017, 27018, 和27019):
mongodb://localhost,localhost:27018,localhost:27019
连接 replica set 三台server , 写入操作应用在主server 并且分布查询到从server 。
mongodb://host1,host2,host3/?slaveOk=true
直接连接第一个server ,无论是replica set一部分或者主server 或者从server 。
mongodb://host1,host2,host3/?connect=direct;slaveOk=true
当帅哥的连接server 有优先级,还需要列出所有server ,帅哥可以使用上述连接方式。
安全模式连接到localhost:
mongodb://localhost/?safe=true
以安全模式连接到replica set,并且等待至少两个复制server 成功写入,超时时间设置为2秒。
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000