0

从我的 Grails 应用程序在 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.*/" }

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

提前致谢!

4

3 回答 3

3

使用 Groovy Pattern 快捷方式~来指定您的查询是正则表达式。

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

有关更多信息,请参阅此博客文章

于 2013-10-22T17:44:23.183 回答
1

这对我有用:在你的 groovy 文件中:

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

或多或少,使用常规的 mongodb 查询,但将 {} 替换为 []。

于 2013-12-27T20:53:58.897 回答
1

要使用正则表达式查询,请使用 $regex运算符定义查询条件

def regexCondition = ['$regex': '/.*te.*/']
def criteria = ['testId': regexCondition]
db.log.find(criteria)
于 2013-01-11T09:36:47.000 回答