1

我正在尝试将 ColdFusion 2016(本地机器开发人员模式)连接到 MongoDB 4.0.13(服务器)。我将 mongodb-driver-core-3.8.2.jar、bson-3.8.2.jar 和 mongodb-driver-3.8.2.jar 安装到我的 lib 文件夹中。当我尝试运行此代码时,它永远不会连接到 Mongo,它会出错。我没有使用正确的驱动程序吗?

代码:

<cfset uri  = CreateObject("java","com.mongodb.MongoClientURI").init("mongodb://wh-mongos-v01.shift4.com:27017")>
<cfset mongoClient  = CreateObject("java","com.mongodb.MongoClient").init(uri)>

<cffunction name="m" returntype="any">
    <cfargument name="value" type="any">
    <cfif IsJSON(arguments.value)>
        <cfset local.retrun = CreateObject("java","com.mongodb.util.JSON").parse(arguments.value)>
    <cfelse>
        <cfset local.retrun = CreateObject("java","com.mongodb.util.JSON").parse( SerializeJSON(arguments.value) )>
    </cfif>
    <cfreturn local.retrun>
</cffunction>

<cfset myDb = mongoClient.getDatabase("testingdb")>
<cfset myCollection = myDb.getCollection("testingcollection")>
<cfdump var="#myCollection.countDocuments()#">

错误:等待连接时在 30000 毫秒后超时。集群状态的客户端视图是 {type=UNKNOWN, servers=[{address=wh-mongodb-v01.xxxxx.com:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely达到end of溪流}}]

4

2 回答 2

1

我想到了。这是它需要的:

  • CF 只需要 Mongo Legacy 驱动程序。所以我检查了兼容性矩阵并加载了 3.12.1 最新的 uber 旧版驱动程序。
  • 问题出在 SSL 上,所以 Mongo 开启了 SSL,我们需要使用 SSL=True 选项。

于 2020-01-24T19:00:30.557 回答
0

你有一个 MongoDB 节点在wh-mongodb-v01.xxxxx.com端口上运行27017吗?在任何情况下,最好的选择是使用连接 URI字符串,您可以在其中指定多个副本集节点以实现高可用性。在这种情况下,您的连接应通过以下方式建立:

<cfset uri = CreateObject("java","com.mongodb.MongoClientURI").init("mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database.collection][?options]]/)>
<cfset mongoClient = CreateObject("java","com.mongodb.MongoClient").init(uri)>
于 2020-01-23T09:03:56.000 回答