2013-01-11 53 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的查詢,但更換{}與[]。