リンクされた質問からのMongoDBソリューションは次のようになります:
db.models.find({ $where: '/^124/.test(this.number)' })
find
に渡すもの ほぼ1対1でMongoidにマップします:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
to_i
この限られたケースでは、呼び出しによって文字列補間が正常に行われるはずです。
これはデータベースに対して行うのはかなり恐ろしいことであることに注意してください。インデックスを使用することはできず、コレクション内のすべてのドキュメントをスキャンします...
通常の正規表現マッチングを実行できるように、文字列フィールドを使用する方がよい場合があります。正規表現を最初に固定すれば、MongoDBでインデックスを使用できると確信しています。データベース内の数値にする必要がある場合は、いつでも整数フィールドと文字列フィールドの両方として格納できます。
field :number, :type => Integer
field :number_s, :type => String
次に、:number_s
を保持するためのフックがいくつかあります :number
として最新 変更します。これを行った場合、パターンマッチングスコープは:number_s
を参照します。 。このようなデータの事前計算と複製はMongoDBでかなり一般的であるため、気にしないでください。