regex - 如何在 Mongodb 上进行不区分大小写的查询?

标签 regex mongodb database

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

如何查询不区分大小写?即使是“andrew”,我也想找到结果;

最佳答案

Chris Fulstow 的解决方案可行 (+1),但它可能效率不高,尤其是在您的收藏非常大的情况下。无根正则表达式(那些不以 ^ 开头的正则表达式,它将正则表达式锚定到字符串的开头),以及那些使用 i 标志以区分大小写的正则表达式不会使用索引,即使它们存在。

您可能考虑的另一种选择是将数据非规范化以存储 name 字段的小写版本,例如 name_lower。然后,您可以有效地查询(特别是如果它被索引)不区分大小写的完全匹配,例如:

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

或者与前缀匹配(一个 Root过的正则表达式)为:

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

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

关于regex - 如何在 Mongodb 上进行不区分大小写的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7101703/

相关文章:

javascript - 正则表达式仅针对某些字符进行分割

mysql:最好的说法是 "the string up to the first instance of any of the following keywords"?

python - 为多个数据库一个一个地运行 alembic 迁移

mysql - MySQL 写入是否受表大小影响?

c# - 正则表达式替换字符串中的第 n 个元素并添加自定义 HTML 标签

javascript - .aspx 的正则表达式?修改查询字符串

node.js - Backbone、Node 和 Mongo 错误验证和通信

mongodb - 如何使用 Rust MongoDB 驱动程序从添加到 GridFS 的文件中获取 ID?

javascript - Mongoose 在将一个文档保存到数据库后产生冲突

database - Liquibase将现有的可为空的约束从true更改为false