/.*N.*/和/ N /之间是否有区别(在MongoDB的正则表达式中)

时间:2014-11-10 13:53:06

标签: regex mongodb

我希望在MongoDB中找到名称字段中包含大写字母N的文档。以下两个搜索都返回正确的结果。

db.col.find({name: /N/})
db.col.find({name: /.*N.*/})

到目前为止,我总是使用正则表达式,如第一个find()语句中所述,相信.*已被添加,如果我不使用^$。但是,如果存在差异,我绝不会知道

1 个答案:

答案 0 :(得分:1)

第一个比第二个更快 这是Perl中的一个基准:

#!/usr/bin/perl 
use strict;
use warnings;
use Benchmark qw(:all);

my @data = (
    'jkhfq lqksjdfh N lmkjqf N kjlh',
    'NNNNNNNNNN',
    'lkjh vuzyd vuyr gdqhgsjkhdg',
);
my $count = -2;
cmpthese($count, {
    'anchor' => sub {
        my @match = grep{/^.*N.*$/} @data;;
    },
    'simple' => sub {
        my @match = grep { /N/ } @data;
    },
});

<强>结果:

           Rate anchor simple
anchor 378332/s     --   -28%
simple 521907/s    38%     --

正则表达式/N//^.*N.*$/快38%。