La soluzione MongoDB dalla domanda collegata sarebbe:
db.models.find({ $where: '/^124/.test(this.number)' })
Cose che consegni a find
mappa praticamente uno a uno su Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
Il to_i
call dovrebbe rendere corretta l'interpolazione delle stringhe per questo caso limitato.
Tieni presente che questa è una cosa piuttosto orribile da fare al tuo database:non può utilizzare gli indici, eseguirà la scansione di ogni singolo documento nella raccolta, ...
Potrebbe essere meglio usare un campo stringa in modo da poter eseguire la normale corrispondenza delle espressioni regolari. Sono abbastanza sicuro che MongoDB sarà in grado di utilizzare un indice se ancori la tua espressione regolare anche all'inizio. Se hai davvero bisogno che sia un numero all'interno del database, puoi sempre memorizzarlo sia come intero che come campo String:
field :number, :type => Integer
field :number_s, :type => String
e poi avere alcuni hook per mantenere :number_s
aggiornato come :number
i cambiamenti. Se lo facessi, il tuo ambito di corrispondenza del modello guarderebbe :number_s
. Il precalcolo e la duplicazione di dati come questo sono abbastanza comuni con MongoDB, quindi non dovresti sentirti male.