当正则表达式搜索的字符串非常大时,我看到 mongo 正则表达式查询不返回结果,而是抛出错误。我有一个场景,我附加了很多名字来做一个正则表达式,因此我的正则表达式搜索字符串超过了 40000 个字符。例如:
db.getCollection('collection').find(
{"name":{"$regex" :"name1 | name2 | name3", "$options":"-i"}}
)
当正则表达式搜索的字符串非常大时,我看到 mongo 正则表达式查询不返回结果,而是抛出错误。我有一个场景,我附加了很多名字来做一个正则表达式,因此我的正则表达式搜索字符串超过了 40000 个字符。例如:
db.getCollection('collection').find(
{"name":{"$regex" :"name1 | name2 | name3", "$options":"-i"}}
)
是的,mongoDB 正则表达式有字符限制,源自 perl 正则表达式限制。因为“MongoDB 使用支持 UTF-8 的 Perl 兼容正则表达式(即“PCRE”)版本 8.41。” MongoDB v3.2
可以看到限制是 32764 个字符:MongoDB add assert of regular expression length
我最近遇到了这个问题,解决方案是改用 $in 查询运算符。$in 没有字符限制。这适合我的问题,因为在如此长的输入情况下它是完全匹配而不是模式匹配。
你能解释一下你为什么这样做吗?正则表达式的想法是创建一个匹配(多个)值的表达式。
示例表达式:
name\d+
将匹配所有 x 为小数的“namex”值。
我们的想法是创建一个表达式来满足您的查询要求。
当您想匹配多个字符串值时,可以使用$and运算符