MongoDB-løsningen fra det linkede spørgsmål ville være:
db.models.find({ $where: '/^124/.test(this.number)' })
Ting, som du giver for at find
kort stort set en-til-en til Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
to_i
opkald bør gøre strenginterpolation i orden for dette begrænsede tilfælde.
Husk på, at dette er en ret forfærdelig ting at gøre ved din database:den kan ikke bruge indekser, den scanner hvert enkelt dokument i samlingen, ...
Du kan være bedre stillet ved at bruge et strengfelt, så du kan lave normal regex-matchning. Jeg er ret sikker på, at MongoDB vil være i stand til at bruge et indeks, hvis du også forankrer dit regex i begyndelsen. Hvis du virkelig har brug for, at det er et tal inde i databasen, kan du altid gemme det som både et heltal og et strengfelt:
field :number, :type => Integer
field :number_s, :type => String
og så har nogle kroge til at beholde :number_s
opdateret som :number
ændringer. Hvis du gjorde dette, ville dit mønstermatchende omfang se på :number_s
. Forberegning og duplikering af data som dette er ret almindeligt med MongoDB, så du burde ikke have det dårligt med det.