1

SQLの世界では、次の効果のために何かをすることができました:

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

これは、"Smith"、"SMITH"、"SmiTH" などの検索に一致します。これは、クエリと値の大文字と小文字を強制的に同じにするためです。

ただし、MongoDB は、インデックスを使用せず、大量のデータに対して低速になる RegEx を使用しないと、この機能を備えていないようです。

MongoDB で検索を行う前に、格納された値を特定のケースに変換する方法はありますか?

$toUpper 集計に出くわしましたが、この特定のケースでそれがどのように使用されるかわかりません。

検索する前に保存された値を変換する方法がない場合、MongoDB で作成された値を MongoDB に変換させることは可能ですか? コレクションにドキュメントを追加すると、「名前」属性が特定のケースに強制されますか? 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 に答える