【发布时间】:2014-01-16 12:21:56
【问题描述】:
我正在连接到不是本地主机的 mongo 服务器。我正在使用猫鼬。 在某些时候我需要连接 mongo 本机驱动程序,所以我这样做:
mongoose.mongo.MongoClient.connect(uri, function (err, conn) {});
但conn 对象是null。
最近我更改了服务器结构,现在所有 mongo 数据库都是远程的,在我的新节点机器上我根本没有安装 mongo shell...首先一切正常,连接 uri 是:
mongodb://x.x.x.x:27017/database,mongodb://y.y.y.y,mongodb://z.z.z.z
其中x.x.x.x:27017 是主要的,由于初始主要的中断一段时间后,新的主要已被选举,现在我以相同的uri开始,但连接对象是null,我不知道为什么...
有人遇到过类似的问题吗?或者可能是解决方案或想法......
【问题讨论】:
-
Mongoose ODM(或任何 MongoDB 驱动程序)不依赖mongoshell 进行连接。驱动程序使用MongoDB Wire Protocol 直接与mongod服务器(或mongos,对于分片集群)交换消息。我建议尝试从您机器上的mongoshell 连接(或从您运行 Mongoose 代码的任何地方),以查看是否存在一般连接问题。您的远程mongod实例可能会阻止通过防火墙或bind_ip指令的连接。 -
解决方案是 MongoClient 的连接 uri 不正确...我使用的 uri 与我在 mongoose 中使用的 uri 相同,但正确的是这个:
mongodb://x.x.x.x:27017,y.y.y.y:27017,z.z.z.z:27017/database
标签: node.js mongodb shell mongoose replicaset