De MongoDB-oplossing van de gekoppelde vraag zou zijn:
db.models.find({ $where: '/^124/.test(this.number)' })
Dingen die je overhandigt om find
wijs vrijwel één-op-één toe aan Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
De to_i
aanroep zou stringinterpolatie in dit beperkte geval goed moeten maken.
Houd er rekening mee dat dit behoorlijk afschuwelijk is om met uw database te doen:het kan geen indexen gebruiken, het scant elk afzonderlijk document in de verzameling, ...
U kunt beter een stringveld gebruiken, zodat u normale regex-overeenkomsten kunt uitvoeren. Ik ben er vrij zeker van dat MongoDB een index kan gebruiken als je je regex ook aan het begin verankert. Als je echt wilt dat het een getal in de database is, kun je het altijd opslaan als zowel een geheel getal als een tekenreeksveld:
field :number, :type => Integer
field :number_s, :type => String
en heb dan wat haken om :number_s
. te behouden up-to-date als :number
veranderingen. Als je dit deed, zou je patroonovereenkomst naar :number_s
. kijken . Het vooraf berekenen en dupliceren van gegevens zoals dit is vrij gebruikelijk bij MongoDB, dus u hoeft zich er niet slecht over te voelen.