mongodb - 使用 Java 驱动程序 3.8 的 ColdFusion 和 MongoDB 4
问题描述
我正在尝试在 MongoDB 4.0 上使用 ColdFusion 11 和 Java MongoDB 驱动程序 3.8 在 Mongo 中执行通配符搜索。
下面的代码给了我错误,说countDocuments()
找不到方法或找不到方法find()
。
<cfset Mongo = CreateObject("java","com.mongodb.MongoClient").init("localhost")>
<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 db = Mongo.getDatabase('fda')>
<cfset DrugInfo = db.getCollection("druginfo")>
<cfset searchCount=druginfo.countDocuments(m({'openfda.brand_name':/Ty/ }))>
<cfset results = DrugInfo.find(m({'openfda.brand_name': /Ty/})).iterator()>
尝试进行完全匹配搜索时,一切正常。
<cfset searchCount=druginfo.countDocuments(m({'openfda.brand_name':'Tylenol'}))>
<cfset results = DrugInfo.find(m({'openfda.brand_name': 'Tylenol'})).iterator()>
我基本上是在 Mongo Compass 中测试我的所有查询并将它们粘贴到我的代码中,但它没有按预期工作。
解决方案
该错误消息的描述性不是很强。
Java 驱动程序不会像 Compass 那样采用正则表达式(或至少不会通过 ColdFusion 对象),因此您必须$regex
使用引号之间的模式,例如:
{ <field>: { $regex: 'pattern', $options: '<options>' } }
例如,而不是
m({'openfda.brand_name':/Ty/ })
采用
m({ 'openfda.brand_name': { '$regex': '^Ty', '$options': 'i' } })
这里有更多关于如何使用
的$regex
信息:(https://docs.mongodb.com/manual/reference/operator/query/regex/)
我希望这有帮助。
推荐阅读
- magento2 - Magento 2 Min - max 产品属性查询
- .net - 在 vb.Net 中访问路径被拒绝
- image - 在 docker 中创建映像时 Cygwin 无法正常工作
- java - Java 8 Windows 权限
- amazon-web-services - 当我尝试在 aws 上访问 ssh 时运行 ssh-add 后,我得到“权限被拒绝(公钥)”
- mqtt - 智能家居设备与 Google home 和 Alexa 的集成
- visual-studio - 阻止 TFS 将所有文件添加到源代码管理
- kubernetes - 如何配置入口以使用 https 将流量定向到 https 后端
- javascript - 如何使用自定义自定义数据-* 属性
- android - 错误是:套接字连接超时.. Android 应用程序