MongoDB-lösningen från den länkade frågan skulle vara:
db.models.find({ $where: '/^124/.test(this.number)' })
Saker som du lämnar för att find
mappa ganska mycket en-till-en till Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
to_i
anrop bör göra stränginterpolering okej för detta begränsade fall.
Tänk på att detta är en ganska hemsk sak att göra med din databas:den kan inte använda index, den skannar varje enskilt dokument i samlingen, ...
Du kanske är bättre att använda ett strängfält så att du kan göra normal regex-matchning. Jag är ganska säker på att MongoDB kommer att kunna använda ett index om du förankrar ditt regex i början också. Om du verkligen behöver att det är ett nummer i databasen kan du alltid lagra det som både ett heltal och ett strängfält:
field :number, :type => Integer
field :number_s, :type => String
och sedan ha några krokar att behålla :number_s
uppdaterad som :number
ändringar. Om du gjorde detta skulle ditt mönstermatchningsomfång titta på :number_s
. Att förberäkna och duplicera data som detta är ganska vanligt med MongoDB så du borde inte må dåligt över det.