我知道这个问题已经被很多人问过。许多解决方案建议使用正则表达式。我想知道是否还有其他方法因为使用正则表达式会减慢查询结果?
例如,如果我有一个 SQL 中的学生表
id name
1 vicky
由于
SQL
不区分大小写,SELECT NAME FROM STUDENT WHERE NAME="vicky"
或 SELECT NAME FROM STUDENT WHERE NAME="VICKY"
或 SELECT NAME FROM STUDENT WHERE NAME="Vicky"
将返回相同的结果。
而在 mongodb 中,如果我有一个学生文档,例如:
{
_id:ObjectId("something"),
name:"Vicky"
}
db.student.find({name:"vicky"}) 将不会返回任何结果。
您可以使用文本索引快速完成,或者使用不带索引的小写字母慢得多(作为正则表达式的替代方案)。
文字索引
您可以在
name
字段和 $search
上创建文本索引
喜欢
db.yourcoll.createIndex( { yourfield: "text" } )
db.yourcoll.find( { $text: { $search: "vicky", $caseSensitive: false} } )
// false is the default so you don't really need it
小写
如果您在该字段上没有索引,您可以先小写,然后进行比较。
var lower_case_variable= "Vicky".toLowerCase();
aggregate(
[ {
"$match" : {
"$expr" : {
"$eq" : [ {
"$toLower" : "$name"
}, lower_case_variable ]
}
}
} ]
)