Решението на MongoDB от свързания въпрос би било:
db.models.find({ $where: '/^124/.test(this.number)' })
Неща, които подавате за find
картографирайте почти едно към едно към Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")
to_i
call трябва да направи интерполацията на низове добре за този ограничен случай.
Имайте предвид, че това е доста ужасяващо нещо за вашата база данни:тя не може да използва индекси, ще сканира всеки един документ в колекцията, ...
Може би е по-добре да използвате поле за низ, за да можете да правите нормално съвпадение на регулярни изрази. Почти съм сигурен, че MongoDB ще може да използва индекс, ако закотвите своя регулярен израз също в началото. Ако наистина имате нужда да бъде число в базата данни, винаги можете да го съхраните като поле за цяло число и низ:
field :number, :type => Integer
field :number_s, :type => String
и след това има някои куки за запазване на :number_s
актуален като :number
промени. Ако сте направили това, вашият обхват за съвпадение на шаблон ще изглежда :number_s
. Предварителното изчисление и дублирането на данни като това е доста често срещано явление с MongoDB, така че не трябва да се чувствате зле от това.