2013-01-11 17 views
0

我在使用Grails应用程序在MongoDB中发出通配符查询时遇到了一些问题。来自grails/groovy的mongodb通配符查询

基本上我现在正在做的方式是通过发出find查询与查询参数数组:

db.log.find(criteria) -> where criteria is an array [testId:"test"] 

这工作只要细如我严格查询实际值。然而,为了好玩,我不是一个通配符搜索试了一下:

db.log.find(criteria) -> this time critera = [testId:/.*te.*/] 

然而,这将在Mongo的查询日志寻找为后:

query: { query: { testId: "/.*te.*/" } 

从而使得查询不是通配符搜索,但而是将其作为字符串查询。 有没有办法解决这个问题,在某种意义上仍然使用这个查询的概念?

在此先感谢!

回答

1

要使用正则表达式查询,用正则表达式$ operator

def regexCondition = ['$regex': '/.*te.*/'] 
def criteria = ['testId': regexCondition] 
db.log.find(criteria) 
+0

这不会让我从mongo控制台运行任何东西。 db.log.find({testId:{$ regex:'/.*te.*/'}}) –

+0

它仍然是mongo将查询解释为字符串的相同问题,删除'',db.log。 find({testId:{$ regex:/.*te.*/}})正常工作 –

+0

@dunnless'db.log.find({testId:{$ regex:/.* te。* /}})'要成为mongodb控制台中的命令,但在Grails中,必须首先将参数放入BasicDBObject对象中。 – coderLMN

3

定义查询条件使用Groovy的模式快捷~指定查询是一个正则表达式。

db.log.find(['testId': ~/.*te.*/]) 

更多信息

看到这个 blog post
+0

niiiiiiicecreme –

1

这为我工作: 在你的常规文件:

db.collectionName.find([fieldName:[$regex:'pattern']]) 

更多或更少,使用常规的MongoDB的查询,但更换{}与[]。