MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Rails mongoid regex sur un champ Integer

La solution MongoDB de la question liée serait :

db.models.find({ $where: '/^124/.test(this.number)' })

Choses que vous remettez à find mapper à peu près un à un à Mongoid :

where(:$where => "/^#{numero.to_i}/.test(this.number)")

Le to_i call devrait rendre l'interpolation de chaîne correcte pour ce cas limité.

Gardez à l'esprit que c'est une chose assez horrible à faire à votre base de données :elle ne peut pas utiliser d'index, elle analysera chaque document de la collection, ...

Il serait peut-être préférable d'utiliser un champ de chaîne afin de pouvoir effectuer une correspondance normale des expressions régulières. Je suis presque sûr que MongoDB pourra utiliser un index si vous ancrez également votre regex au début. Si vous avez vraiment besoin qu'il s'agisse d'un nombre dans la base de données, vous pouvez toujours le stocker à la fois sous la forme d'un champ entier et d'un champ chaîne :

field :number,   :type => Integer
field :number_s, :type => String

puis avoir quelques crochets pour garder :number_s à jour sous :number changements. Si vous faisiez cela, votre portée de correspondance de modèle regarderait :number_s . Le précalcul et la duplication de données comme celle-ci sont assez courants avec MongoDB, vous ne devriez donc pas vous en vouloir.