我正尝试在Mongo中使用Java11和MongoDB 4.0上的ColdFusion MongoDB驱动程序3.8执行通配符搜索。
下面的代码显示无法找到方法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中测试我的所有查询,并将它们粘贴到我的代码中,但它并没有像预期的那样工作。
发布于 2018-08-03 05:30:22
该错误消息的描述性不强。
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/)
我希望这能帮到你。
https://stackoverflow.com/questions/51658025
复制相似问题