sql >> Database teknologi >  >> NoSQL >> MongoDB

Skinner mongoide regex på et heltalsfelt

MongoDB-løsningen fra det linkede spørgsmål ville være:

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

Ting, som du giver for at find kort stort set en-til-en til Mongoid:

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

to_i opkald bør gøre strenginterpolation i orden for dette begrænsede tilfælde.

Husk på, at dette er en ret forfærdelig ting at gøre ved din database:den kan ikke bruge indekser, den scanner hvert enkelt dokument i samlingen, ...

Du kan være bedre stillet ved at bruge et strengfelt, så du kan lave normal regex-matchning. Jeg er ret sikker på, at MongoDB vil være i stand til at bruge et indeks, hvis du også forankrer dit regex i begyndelsen. Hvis du virkelig har brug for, at det er et tal inde i databasen, kan du altid gemme det som både et heltal og et strengfelt:

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

og så har nogle kroge til at beholde :number_s opdateret som :number ændringer. Hvis du gjorde dette, ville dit mønstermatchende omfang se på :number_s . Forberegning og duplikering af data som dette er ret almindeligt med MongoDB, så du burde ikke have det dårligt med det.



  1. MongoCommandException:Kommando mislykkedes med fejl 8000 (AtlasError):'intet SNI-navn sendt, sørg for at bruge en MongoDB 3.4+ driver/shell.'

  2. Få de sidste dokumenter med et særskilt kriterium

  3. hvordan forbinder man mongoDB til serveren?

  4. Indlejring af beskedsvar i beskedforælder med mongodb ved hjælp af mongoid