MongoDB连接失败阻塞过久:MongoDB接口详解

MongoDB连接失败阻塞过久:MongoDB接口详解

执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接的建立,当连接被建立后,就会开始打印日志信息。

标准 URI 连接语法:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
  • mongodb:// 这是固定的格式,必须要指定。
  • username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
  • host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。
  • portX 可选的指定端口,如果不填,默认为27017
  • /database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。
  • ?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开

标准的连接格式包含了多个选项(options),如下所示:

选项描述
replicaSet=name验证replica set的名称。 Impliesconnect=replicaSet.
slaveOk=true|falsetrue:在connect=direct模式下,驱动会连接第一台机器,即使这台服务器不是主。在connect=replicaSet模式下,驱动会发送所有的写请求到主并且把读取操作分布在其他从服务器。false: 在 connect=direct模式下,驱动会自动找寻主服务器. 在connect=replicaSet 模式下,驱动仅仅连接主服务器,并且所有的读写命令都连接到主服务器。
safe=true|falsetrue: 在执行更新操作之后,驱动都会发送getLastError命令来确保更新成功。(还要参考 wtimeoutMS).false: 在每次更新之后,驱动不会发送getLastError来确保更新成功。
w=n驱动添加 { w : n } 到getLastError命令. 应用于safe=true。
wtimeoutMS=ms驱动添加 { wtimeout : ms } 到 getlasterror 命令. 应用于 safe=true.
fsync=true|falsetrue: 驱动添加 { fsync : true } 到 getlasterror 命令.应用于 safe=true.false: 驱动不会添加到getLastError命令中。
journal=true|false如果设置为 true, 同步到 journal (在提交到数据库前写入到实体中). 应用于 safe=true
connectTimeoutMS=ms可以打开连接的时间。
socketTimeoutMS=ms发送和接受sockets的时间。

就比如,我们运行mongo时:

wanghuideMBP:~ wanghui$ mongo
MongoDB shell version v3.6.4
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.4

可见connecting to: mongodb://127.0.0.1:27017

mongodb://127.0.0.1:27017 就等价于 mongo

详细的看http://www.runoob.com/mongodb/mongodb-connections.html

在本博客的Node.js 连接 MongoDB-7可见nodejs连接数据库的url格式就是这个:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("mydatabase");
    dbo.collection("products").drop(function(err, delOK) { // 执行成功 delOK 返回 true,否则返回 false
        if (err) throw err;
        if (delOK) console.log("集合已删除");
        db.close();
    });
});

参数说明

public MongoClient::__construct ([ string $server = “mongodb://localhost:27017” [, array $options = array(“connect” => TRUE) ]] )

如果没有传入参数,它会连接到 “localhost:27017”(或者 php.ini 里指定的 mongo.default_hostmongo.default_port)。

server 应该是这样的形式:

mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db

连接字符串总是以 mongodb:// 开头,表示它是一个连接字符串。

如果指定了 usernamepassword,构造器会在返回前尝试验证连接数据库。 用户名和密码是可选的,需要指定时必须紧随一个 @

至少指定一个主机(端口可选,默认总是 27017),并且可以连接到想要数量的主机。 主机名由逗号分隔,构造器会成功返回,如果连接到了至少一个主机。 如果无法连接到任何主机,它将会抛出一个异常 MongoConnectionException

如果你指定了一个用户名和密码,你可以指定一个要验证的数据库。 如果没有指定 db,将会使用 “admin”。

可选的查询字符串可以用于指定额外的选项。 同样参数也支持 options 数组。

选项的一部分指示了驱动在集群环境下对备份节点如何读取。 关于读取首选项运行的额外信息可以查找 读取首选项 文档页面。

参数

  • server

    服务器名。

  • options

    此连接的数组选项。当前有效的选项包括了:"connect"构造器是否应该在返回前连接。 默认为 TRUE。当设置为 FALSE,驱动会在有查询必要时 自动 连接到服务器。 另外,你也可以用 MongoClient::connect() 手动运行。Warning这个选项不支持通过连接字符串来设置。"db"要验证的数据库能在这里指定,而不是在主机列表中包含它。 能够重载主机列表中指定的数据库。"password"能在这里指定密码,而不是在主机列表中指定。 当密码里有一个 “@” 的时候尤其有用。 此参数会覆盖主机列表中设置的密码。"readPreference"指定读取首选项类型。 读取首选项提供了对备份数据读取的控制。允许的值有: MongoClient::RP_PRIMARYMongoClient::RP_PRIMARY_PREFERREDMongoClient::RP_SECONDARYMongoClient::RP_SECONDARY_PREFERREDMongoClient::RP_NEAREST。更多信息参见读取首选项文档。"readPreferenceTags"以字符串的数组指定读取选项标签。 标签能够控制 readPreference 选项来进一步控制从备份节点数据的读取。更多信息参见读取首选项文档。"replicaSet"要连接的集群名称。 如果指定了,活跃节点能够自动检测到。 这意味着驱动能够最终甚至能够连接到未列出的服务器。 更多细节参见集群的例子。"connectTimeoutMS"打开连接超时的时间。“timeout”“connectTimeoutMS” 废弃的别名。"socketTimeoutMS"在套接字上发送或接收超时的时间。Note: 这是客户端的超时时间。如果一个 insert 达到了 socketTimeoutMS, 将无法得知服务器是否确实已写入。"username"能在这里指定用户名,而不是在主机列表中指定。 当用户名包括一个「:」时尤其有用。 它会覆盖主机列表中的设置。"w"选项 w 指定了驱动的 Write Concern,决定了驱动在写入时阻塞的时间。 默认值是 1。此选项适用于单台服务器或者是集群。 一个正数值控制了在驱动继续之前,有多少个节点必须应答写入的指令。 值 1 将让单台服务器或者活跃节点(在集群里)应答写入操作。 值 3 将阻塞驱动直至写入到活跃节点和其他两个备份节点服务器(在集群里)。一个字符串的值用于控制考虑 write concerns 的标签集。 “majority” 是特殊用于确保写入操作被应用于大多数(大于 50%)参与的节点。*“wTimeout”*此选项用于和 “w” 参数组合使用。 它控制了服务器等待多少毫秒来满足 write concern。 如果超时了,驱动会抛出 MongoCursorException 异常。

返回值

返回一个新的数据库连接对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值