mongodb 中搜索不区分大小写?

问题描述 投票:0回答:2

我知道这个问题已经被很多人问过。许多解决方案建议使用正则表达式。我想知道是否还有其他方法因为使用正则表达式会减慢查询结果?

例如,如果我有一个 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"}) 将不会返回任何结果。

mongodb
2个回答
4
投票

您可以使用文本索引快速完成,或者使用不带索引的小写字母慢得多(作为正则表达式的替代方案)。

文字索引
您可以在

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

-3
投票

使用

$regex

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

mongo游乐场

© www.soinside.com 2019 - 2024. All rights reserved.