【问题标题】:MongoDB LIKE vs. Mysql LIKEMongoDB LIKE 与 Mysql LIKE
【发布时间】:2012-03-14 11:26:46
【问题描述】:

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

SELECT * FROM table WHERE a1 LIKE '%test%' OR a2 LIKE '%test%'

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

如果我在 mongo 中进行此查询

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

我会得到大约 2k 个结果,少 5 倍。这是怎么回事?

每个db中的数据都是一样的。

【问题讨论】:

  • 您的 SQL table 和 MongoDB 集合的记录总数是否相同?
  • likei 说,同一个数据库,它们完全一样,65k 条记录都有
  • 请注意,如果您在 a1/2 上有一个索引,这不会有效地使用索引。

标签: mysql mongodb search sql-like


【解决方案1】:

MySQL的LIKE is case-insensitive默认:

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

mysql> SELECT 'abc' LIKE 'ABC';
   -> 1

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

尝试使用不区分大小写的正则表达式。我不熟悉 MongoRegex 的语法,但 the fine manual 说通常的 /i 修饰符应该可以工作:

new MongoRegex('/test/i')

案例问题与在 MySQL (~10k) 中获得比 MongoDB (~2k) 更多的匹配项一致。

【讨论】:

  • 我添加“i”表示不敏感,我只加倍结果,但仍然比 mysql 少很多,结果少 36 倍
  • @Squirll:MySQL 发现 MongoDB 没有发现哪些东西,反之亦然?
  • 让我们说“免费门票”或只是“门票”,在 db 中有平面文章,但 mongo 发现的很少
  • MongoDB 没有找到的那个是什么样的?您需要更具体地说明遗漏的内容。
  • Example word Airplain.. 我们有带有“Free Airplain Tickets”的文章,mongo 找不到那篇文章,mysql 会找到或将找到少量包含 Airplain 字样的文章
猜你喜欢
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多