var thename = 'Andrew';
db.collection.find({'name':thename});

如何查询不区分大小写?即使"安德鲁",我也要找到结果;

推荐答案

Chris Fulstow的解决方案将有效(+1),但是它可能效率不高,特别是当您的集合非常大时.非根正则表达式(不是以^开头的正则表达式,它将正则表达式锚定到字符串的开头),以及那些使用i标志表示不区分大小写的正则表达式将不会使用索引,即使它们存在.

您可以考虑的另一种 Select 是将数据非规范化,以存储name字段的小写版本,例如存储为name_lower.然后,您可以高效地(特别是在为其编制索引的情况下)查询不区分大小写的精确匹配,如下所示:

db.collection.find({"name_lower": thename.toLowerCase()})

或使用前缀匹配(带根的正则表达式),如下所示:

db.collection.find( {"name_lower":
    { $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);

这两个查询都将使用name_lower上的索引.

Database相关问答推荐

如何将对象源动态设置为子窗体

Prisma - 将属性的类型设置为枚举数组

如何将表字段的默认值设置为 0.00?

单元测试:用于测试的数据库设置

只用一个 save() 插入多行

查询最后一天、上周、上个月SQLite

SQL 概念 LEFT OUTER JOIN 和 WHERE NOT EXISTS 基本相同吗?

在一次 SQL 查询中更新多行的多列

在 sql server 中存储持续时间(时间跨度)

如何从 MySQL 行中修剪前导和尾随引号?

Django中的Atomic原子操作?

每个 Docker 容器一个或多个数据库

应用程序用户应该是数据库用户吗?

无法加载时区?

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

如何在实体框架中使用字符串属性作为主键

为什么用 varbinary 而不是 varchar

PostgreSQL 的示例数据库

如何在 SQL Server 中生成并手动插入唯一标识符?

Oracle order NULL LAST 默认