MongoDB LIKE与Mysql LIKE

Squ*_*rll 1 mysql search mongodb sql-like

我正在将一个站点的某些部分从mysql移动到mongodb,并且将使用mongodb的一部分是搜索.我有一个问题,如果我在mysql中进行此查询

SELECT * FROM table WHERE a1 LIKE '%test%' OR a2 LIKE '%test%'
Run Code Online (Sandbox Code Playgroud)

我将获得超过10k的结果.没关系.

如果我在mongo中执行此查询

$mongo->find(
    array(
        '$or' => array(
            array('a1' => new MongoRegex('/test/')),
            array('a2' => new MongoRegex('/test/'))
        )
    )
)->count();
Run Code Online (Sandbox Code Playgroud)

我将获得大约2k的结果,减少5倍.这是怎么回事?

每个数据库中的数据是相同的.

mu *_*ort 6

MySQL的LIKE默认情况下不区分大小写:

以下两个语句说明字符串比较不区分大小写,除非其中一个操作数是二进制字符串:

mysql> SELECT 'abc' LIKE 'ABC';
   -> 1
Run Code Online (Sandbox Code Playgroud)

但默认情况下,MongoDB的正则表达式搜索将区分大小写,因为JavaScript的正则表达式区分大小写.

尝试使用不区分大小写的正则表达式.我不熟悉MongoRegex的语法,但精细的手册说通常的/i修饰符应该有效:

new MongoRegex('/test/i')
Run Code Online (Sandbox Code Playgroud)

案例问题与MySQL(~10k)中的匹配比MongoDB(~2k)更多.