MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Rails mongoid regex върху поле Integer

Решението на 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, така че не трябва да се чувствате зле от това.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. JSONObject to Document

  2. MongoDB група и сума с идентификатор като ключ

  3. Не може да се монтира споделяне на файлове на azure като том на mongodb в екземпляри на контейнер на azure

  4. Индексиране на поле, което е в масив от поддокументи

  5. Mongoose не попълва (.populate()) на Production (Heroku), но работи на Local