[英]Case insensitive search in mongodb?
我知道這個問題已經被很多人問過。 許多解決方案都建議使用正則表達式。 我想知道有沒有其他方法因為使用正則表達式會減慢查詢結果?
例如,如果我在 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 dont really need it
小寫
如果你沒有那個字段的索引,你可以先小寫然后比較。
var lower_case_variable= "Vicky".toLowerCase();
aggregate(
[ {
"$match" : {
"$expr" : {
"$eq" : [ {
"$toLower" : "$name"
}, lower_case_variable ]
}
}
} ]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.