Rozwiązanie MongoDB z powiązanego pytania to:
db.models.find({ $where: '/^124/.test(this.number)' })
Rzeczy, które przekazujesz do find
mapa prawie jeden do jednego na Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
to_i
wywołanie powinno sprawić, że interpolacja łańcuchów będzie poprawna w tym ograniczonym przypadku.
Należy pamiętać, że jest to dość przerażająca rzecz do zrobienia z bazą danych:nie może ona używać indeksów, skanuje każdy dokument w kolekcji, ...
Lepiej byłoby użyć pola znakowego, aby móc wykonywać normalne dopasowywanie wyrażeń regularnych. Jestem prawie pewien, że MongoDB będzie w stanie użyć indeksu, jeśli zakotwiczysz również swoje wyrażenie regularne na początku. Jeśli naprawdę potrzebujesz, aby była to liczba w bazie danych, możesz zawsze przechowywać ją jako pole typu Integer i String:
field :number, :type => Integer
field :number_s, :type => String
i mieć kilka haczyków do przechowywania :number_s
aktualne jako :number
zmiany. Jeśli to zrobisz, twój zakres dopasowania wzorca będzie wyglądał na :number_s
. Takie wstępne obliczanie i duplikowanie danych jest dość powszechne w MongoDB, więc nie powinieneś się z tym czuć źle.