mongo と mongoid を使用した Rails 3.2.x アプリがあります。「ユーザー」を名前でソートする「スコープ」をモデルに定義したいと考えています。問題は、並べ替えが大文字と小文字を区別しないことです。これは、mongo 自体ではサポートされていません。
スコープを使用して正しく行う方法はありますか?
mongo と mongoid を使用した Rails 3.2.x アプリがあります。「ユーザー」を名前でソートする「スコープ」をモデルに定義したいと考えています。問題は、並べ替えが大文字と小文字を区別しないことです。これは、mongo 自体ではサポートされていません。
スコープを使用して正しく行う方法はありますか?
これは、永続化された計算フィールド パターンを必要とする典型的なケースです。
並べ替えたいフィールドが と呼ばれているとしname
ます。モデルで、割り当てをトラップしname
、クエリできる追加のフィールドを設定します。例えば:
def name=(value)
self['name'] = value
self['_lc_name'] = value.downcase
end
計算フィールドを Mongoid フィールドとして定義する必要はありません。
Mongoid で_lc_name
使用してソートを高速化するためのインデックスを作成します。index
これを実現するには、 mongodb 集約フレームワークを使用する必要があります。
簡単な要約は、これを達成するためにパイプのようなコマンドを実行できるということです(UNIXのように)。集約フレームワークを使用して、「n」回の操作を実行できます。