sql >> Databasteknik >  >> NoSQL >> MongoDB

Rails mongoida regex på ett heltalsfält

MongoDB-lösningen från den länkade frågan skulle vara:

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

Saker som du lämnar för att find mappa ganska mycket en-till-en till Mongoid:

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

to_i anrop bör göra stränginterpolering okej för detta begränsade fall.

Tänk på att detta är en ganska hemsk sak att göra med din databas:den kan inte använda index, den skannar varje enskilt dokument i samlingen, ...

Du kanske är bättre att använda ett strängfält så att du kan göra normal regex-matchning. Jag är ganska säker på att MongoDB kommer att kunna använda ett index om du förankrar ditt regex i början också. Om du verkligen behöver att det är ett nummer i databasen kan du alltid lagra det som både ett heltal och ett strängfält:

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

och sedan ha några krokar att behålla :number_s uppdaterad som :number ändringar. Om du gjorde detta skulle ditt mönstermatchningsomfång titta på :number_s . Att förberäkna och duplicera data som detta är ganska vanligt med MongoDB så du borde inte må dåligt över det.



  1. Mongodb snabbkorrigering KB2731284

  2. Hur får man ett specifikt inbäddat dokument i en MongoDB-samling?

  3. Hur Hadoop fungerar – Förstå hur Hadoop fungerar

  4. Det går inte att skriva över "users"-modellen när noden js har kompilerats