我想在文档中搜索具有特殊字符(如" $ / . @ > "
)的值。
让我们考虑一下,我有myKey,其值为"test$australia", "test$austria", "test$belgium", "green.africa".
我想搜索带有'.*$aus.*',
的值
比如说
db.myCollection.find({ myKey : /.*$aus.*/i });
或
db.myCollection.find({ myKey : { '$regex' : '.*$aus.*','$options' : 'i' });
以上查询不起作用,我应该如何形成查询?使用MongoDB 2.4.1。
7条答案
按热度按时间qvsjd97n1#
你必须用
\
转义$
:5kgi1eie2#
转义所有regex特殊字符:
使用regex和选项“i”(忽略大小写)创建一个查询:
使用查询执行搜索:
注意:不要忘记为您要搜索的字段创建索引。索引字段可以提高正则表达式查询的速度。在我的例子中,我的“名字”字段应该是这样的:
093gszye3#
您可以使用以下命令:
bq9c1y664#
输出是这样的:
注:这样要单独专用字符行
输出如下:
bsxbgnwa5#
可以使用https://www.npmjs.com/package/regex-escape。它是一个很好的库,用于转义正则表达式中使用的特殊字符
f1tvaqid6#
在
re.escape
函数下定义搜索键,它将解决特殊字符正则表达式的问题。uxh89sit7#
https://stackoverflow.com/a/52322010/8208083的Java等效代码如下:
当您需要在Spring的@Query注解中传递search关键字时,这很有用。