1

在 SQL 世界中,我可以做一些事情:

SELECT name FROM table WHERE UPPER(name) = UPPER('Smith');

这将匹配对“Smith”、“SMITH”、“SmiTH”等的搜索……因为它强制查询和值是相同的大小写。

但是,如果不使用 RegEx,MongoDB 似乎没有此功能,RegEx 不会使用索引,并且对于大量数据会很慢。

有没有办法在 MongoDB 中对存储的值进行搜索之前将其转换为特定的情况?

我遇到了 $toUpper 聚合,但我不知道在这种特殊情况下如何使用它。

如果在搜索之前无法转换存储的值,是否可以让 MongoDB 在 Mongo 中创建值时转换它?因此,当我将文档添加到集合中时,它会强制将“名称”属性用于特定情况吗?类似于 Rails 世界中的回调。

看起来也可以为 MongoDB 创建存储的 JS,类似于存储过程。这也是一个可行的解决方案吗?

主要是在寻找正确方向的推动力;一旦我知道我在寻找什么,我就可以找出特定的代码,但到目前为止,我什至不确定我想要的功能是否可行。

4

2 回答 2

2

您必须在存储数据之前对其进行规范化。不支持在运行时将规范化作为查询的一部分。

于 2012-05-03T14:52:40.090 回答
2

最简单的做法可能是保存您要搜索的字段的大小写规范化(即全大写)和显示版本。假设您正在存储用户并希望对姓氏进行不区分大小写的搜索。您可能会存储:

{
    _id: ObjectId(...),
    first_name: "Dan",
    last_name: "Crosta",
    last_name_upper: "CROSTA"
}

然后,您可以在 上创建索引last_name_upper,并进行如下查询:

> db.users.find({last_name_upper: "CROSTA"})
于 2012-05-03T14:54:22.543 回答