sql >> Database >  >> NoSQL >> MongoDB

Rails mongoïde regex op een Integer-veld

De MongoDB-oplossing van de gekoppelde vraag zou zijn:

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

Dingen die je overhandigt om find wijs vrijwel één-op-één toe aan Mongoid:

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

De to_i aanroep zou stringinterpolatie in dit beperkte geval goed moeten maken.

Houd er rekening mee dat dit behoorlijk afschuwelijk is om met uw database te doen:het kan geen indexen gebruiken, het scant elk afzonderlijk document in de verzameling, ...

U kunt beter een stringveld gebruiken, zodat u normale regex-overeenkomsten kunt uitvoeren. Ik ben er vrij zeker van dat MongoDB een index kan gebruiken als je je regex ook aan het begin verankert. Als je echt wilt dat het een getal in de database is, kun je het altijd opslaan als zowel een geheel getal als een tekenreeksveld:

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

en heb dan wat haken om :number_s . te behouden up-to-date als :number veranderingen. Als je dit deed, zou je patroonovereenkomst naar :number_s . kijken . Het vooraf berekenen en dupliceren van gegevens zoals dit is vrij gebruikelijk bij MongoDB, dus u hoeft zich er niet slecht over te voelen.



  1. Hoe implementeer ik een zoekfilterquery met behulp van mongodb?

  2. Meerdere waarden atomair uit de Redis-gegevensstructuur halen?

  3. Hoe gebruik ik redis' `DUMP` en `RESTORE` (offline)?

  4. hoe de maximale waarde van een veld in MongoDB te krijgen?