ColdFusion 2016 和 MongoDB 4.0.13

ColdFusion 2016 and MongoDB 4.0.13

我正在尝试将 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()#">

Error: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=wh-mongodb-v01.xxxxx.com:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketReadException: Prematurely reached end of stream}}]

您在端口 27017wh-mongodb-v01.xxxxx.com 有 MongoDB 节点 运行 吗?在任何情况下,最好的选择是使用 Connection 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)>

我明白了。这是它需要的:

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