2012-03-30 14 views
13

La documentazione Mongoid dà solo un esempio di fare una ricerca con caratteri jolly:Come si eseguono ricerche con caratteri jolly con Mongoid in un ambiente Ruby on Rails?

Person.where(first_name: /^d/i) 

Questo trova tutte le persone con il primo nome che inizia con la "d".

Che cosa rappresentano il /^ e /i?

Come faccio a trovare tutte le persone con il loro nome che hanno un "na" nel mezzo della stringa? Ad esempio, questa query potrebbe trovare "jonathan" poiché "na" è una sottostringa dell'intera stringa.

C'è un sito Web o una guida con queste informazioni?

risposta

34

È necessario questo per trovare persone con "na" nel nome.

Person.where(first_name: /na/i) 

Per quanto riguarda il tuo esempio:

Person.where(first_name: /^d/i) 

^ significa "all'inizio della riga". Questa regex corrisponderà a tutte le stringhe in cui la prima lettera è "d". /i significa "fare corrispondenze senza distinzione tra maiuscole e minuscole". Quindi corrisponderà sia a "d" che a "D".

Nota: solo prefissi regex (con ^ nella parte anteriore) sono in grado di utilizzare gli indici.

Is there website or guide with this information?

Ecco my favourite.

+3

+1 sul collegamento a Rubular.com – Joe

+0

È possibile eseguire query come 'Person.where (first_name:/na/i)' se il campo 'first_name' è di tipo' Mongoid :: EncryptedString'. Sto usando mongoid 3.1.6 e ottenendo * TypeError: nessuna conversione implicita di Regexp in String *. –

4

Questa non è una ricerca "jolly", questa viene definita un'espressione regolare.

/^d/i 
  • Le due barre sono solo i delimitatori regex, si cerca ciò che è tra questi due barre.
  • Il seguente i è un modificatore o un'opzione. Cambia il comportamento di corrispondenza della tua espressione regolare, il i sta per insensibile alla distinzione tra maiuscole e minuscole, significa che corrisponde a "d" e "D".
  • Il primo carattere ^ è un'ancora, àncora il modello di ricerca per l'inizio della stringa, significa match "d" solo all'inizio della stringa

Un buon tutorial sulle espressioni regolari è la tutorial on regular-expressions.info

Se si desidera cercare una stringa in qualsiasi punto della stringa, rimuovere l'ancoraggio che lega il modello all'inizio, /na/ troverà "na" in qualsiasi punto della stringa.