我正在尝试在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中测试所有查询并将它们粘贴到我的代码中,但是并没有按预期工作。
答案 0 :(得分:2)
该错误消息不是很描述性。
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/)