簡體   English   中英

在 mongodb 中搜索不區分大小寫?

[英]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 ]
    }
  }
} ]
)

使用$regex

db.collection.find({
  name: {
    $regex: "Vicky",
    $options: "i"
  }
})

mongo游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM