【问题标题】:Does mongoose.mongo.MongoClient.connect() works without mongo shell?mongoose.mongo.MongoClient.connect() 是否可以在没有 mongo shell 的情况下工作?
【发布时间】: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 驱动程序)不依赖 mongo shell 进行连接。驱动程序使用MongoDB Wire Protocol 直接与mongod 服务器(或mongos,对于分片集群)交换消息。我建议尝试从您机器上的mongo shell 连接(或从您运行 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


【解决方案1】:

连接 uri 错误:

改为:

mongodb://x.x.x.x:27017/database,mongodb://y.y.y.y,mongodb://z.z.z.z,{options}

对于本地驱动程序 MongoClient 我应该使用:

mongodb://x.x.x.x:27017,y.y.y.y:27017,z.z.z.z:27017/database?opt1=o1&opt2=o2

这是我找到此解决方案的地方: MongoClient.connect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2018-11-15
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多