var thename = 'Andrew';
db.collection.find({'name':thename});
如何查询不区分大小写?即使"安德鲁",我也要找到结果;
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
上的索引.