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}}]
您在端口 27017
的 wh-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 选项。
我正在尝试将 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}}]
您在端口 27017
的 wh-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 选项。