Regex MongoDB计数和正则表达式搜索计数不匹配

Regex MongoDB计数和正则表达式搜索计数不匹配,regex,mongodb,pcre,database,Regex,Mongodb,Pcre,Database,我有一个巨大的mongoDB,其中包含我使用名称作为索引的文档 基本上,我有一个包含48000016条目的文本文件。(我使用wc-l获得该计数) 为了提供更多的上下文,数据库包含了很多我们从OCR中提取的名称(所以有很多垃圾),还有其他语言的名称(日语、俄语等) 我的MongoDB表统计数据告诉我有48000016,这很好 出现此问题的原因是,我想使用以下正则表达式查询名称上的项目(这是一个标准字符串): /^([A-Z]|\W|\s|\d|_)/i 因此,我的清单: 有支票吗 不区分大小

我有一个巨大的mongoDB,其中包含我使用名称作为索引的文档

基本上,我有一个包含48000016条目的文本文件。(我使用wc-l获得该计数)

为了提供更多的上下文,数据库包含了很多我们从OCR中提取的名称(所以有很多垃圾),还有其他语言的名称(日语、俄语等)

我的MongoDB表统计数据告诉我有48000016,这很好

出现此问题的原因是,我想使用以下正则表达式查询名称上的项目(这是一个标准字符串):

 /^([A-Z]|\W|\s|\d|_)/i
因此,我的清单:

  • 有支票吗
  • 不区分大小写-检查
  • 任何数字-检查
  • 下划线检查
  • \W表示不是数字、字母或下划线的任何内容
所以据我所知,这个正则表达式应该可以得到所有信息,因为我用这个正则表达式查询数据库中的字符串值。但问题是我遗漏了5项

当我对查询结果进行计数时,我有48000011项

知道这5个在哪里吗?由于我的问题的性质,我可以简单地使用一个简单的游标遍历所有项目,我知道可以这样做,但我需要一个可以检索所有值的正则表达式

如注释所示,我在数据库上运行了此查询

db.name.aggregate({$group:{_id:"uniqueDocs", count:{$sum:1}}}) 
结果是:

{ "result" : [ ], "ok" : 1 }

非常感谢

我看到您正在使用锚点
^
匹配一行的开头。该行可能以新行
\n
或回车符
\r
开头

尝试将
\n
\r
包含到正则表达式中

/^([A-Z]|\W|\s|\d|\r|\n|_)/i
还要检查以拆下锚固件

/([A-Z]|\W|\s|\d|\r|\n|_)/i
最后一个选项是反转正则表达式以查看哪些记录不包括在内。这些正则表达式还应该计算空字符串

/^(?![.*])/i

我要感谢@Paul Wasilewski给了我一些很好的解决方案。我发现我的问题与正则表达式问题无关

我的5个条目没有索引,它们的长度超过1024字节,所以MongoDB无法对它们进行索引


这就是正则表达式无法查询它们的原因。

如何反转正则表达式并检查结果?请使用run
db..aggregate({$group:{u id:{uniqueDocs],count:{$sum:1}}}}})
并将其添加到您的问题中尝试将
\n\r
包含到您的正则表达式中,查看我的更新答案。我忘了在问题中提到,我展示的正则表达式是紧凑型的,实际上我使用的是这样的东西:A | B | C | D。。。我从python数组生成的,因为我想在多个并发进程中处理数据库。我仔细检查了一下,没有错误。他们正确地给出了与已发布正则表达式相同的结果。所以问题出在别处。我尝试了这两个命令,但仍然得到相同的结果。据我所知,我们在其他方面都应该匹配,但事实并非如此。所以我猜我有不能被正则表达式处理的空字符串或特殊字符。这可能吗?@ElCapitaine,空字符串可能是一个很好的解释。尝试反转regex^(?![.*)并查看结果。这也会找到空字符串