A solução do MongoDB da pergunta vinculada seria:
db.models.find({ $where: '/^124/.test(this.number)' })
Coisas que você entrega para
find
mapeie praticamente um para um para Mongoid:where(:$where => "/^#{numero.to_i}/.test(this.number)")
O
to_i
call deve fazer a interpolação de strings correta para este caso limitado. Tenha em mente que isso é uma coisa muito horrível de se fazer em seu banco de dados:ele não pode usar índices, ele verificará todos os documentos da coleção, ...
Talvez seja melhor usar um campo de string para poder fazer a correspondência normal de regex. Tenho certeza de que o MongoDB poderá usar um índice se você ancorar sua regex no início também. Se você realmente precisar que seja um número dentro do banco de dados, poderá sempre armazená-lo como um campo Integer e String:
field :number, :type => Integer
field :number_s, :type => String
e então ter alguns ganchos para manter
:number_s
atualizado como :number
mudanças. Se você fizer isso, seu escopo de correspondência de padrões olhará para :number_s
. Pré-computar e duplicar dados como esse é bastante comum com o MongoDB, então você não deve se sentir mal com isso.