MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Rails mongoid regex em um campo Integer


A solução do MongoDB da pergunta vinculada seria:
db.models.find({ $where: '/^124/.test(this.number)' })

Coisas que você entrega para find mapeie praticamente um para um para Mongoid:
where(:$where => "/^#{numero.to_i}/.test(this.number)")

O to_i call deve fazer a interpolação de strings correta para este caso limitado.

Tenha em mente que isso é uma coisa muito horrível de se fazer em seu banco de dados:ele não pode usar índices, ele verificará todos os documentos da coleção, ...

Talvez seja melhor usar um campo de string para poder fazer a correspondência normal de regex. Tenho certeza de que o MongoDB poderá usar um índice se você ancorar sua regex no início também. Se você realmente precisar que seja um número dentro do banco de dados, poderá sempre armazená-lo como um campo Integer e String:
field :number,   :type => Integer
field :number_s, :type => String

e então ter alguns ganchos para manter :number_s atualizado como :number mudanças. Se você fizer isso, seu escopo de correspondência de padrões olhará para :number_s . Pré-computar e duplicar dados como esse é bastante comum com o MongoDB, então você não deve se sentir mal com isso.