Equivalente operatore like in MongoDB

Sto utilizzando MongoDB e vorrei fare una interrogazione (query) equivalente ad una select sql con l'operatore LIKE , tipo come questa:

SELECT * 
FROM users 
WHERE name LIKE '%ar%'

Come posso ottenere la stessa interrogazione in MongoDB, esiste per questo l'operatore like?

Risolta 2
MongoDB 29-06-2018 3 Risposte 2009 Visite +2

Risposte ( 3 approvate )

  1. Bruno Verzinesi
    +2
    29-06-2018 12:39:38
    Rispondi

    Sostanzialmente devi usare le espressioni regolari anziché i caratteri wildcard, la sintassi generale è

    db.users.find({'name': {'$regex': 'my_text'}})

    ricordo che nelle regular expression puoi usare anche i caratteri ^ e $ per indicare rispettivamente inizio e fine stringa, ad esempio così ti trova solo i nomi che iniziano per ar e poi sono seguiti da zero o più caratteri, come arianna

    db.users.find({"name": /^ar/})

    mentre per il fine stringa scriverai

    db.users.find({"name": /na$/})

    quindi troverà tutti i nomi che finiscono per 'na', come arianna, susanna e così via.

  2. Guido Sperciani
    +1
    29-06-2018 12:31:46
    Rispondi

    Devi usare

    db.users.find({"name": /.*ar.*/})

    Nelle espressioni regolari .* equivale al carattere wildcard % ossia fa il matching di qualsiasi carattere (anche più di uno) prima e dopo la stringa 'ar', in questo caso ti troverà tutti i nomi come: sara, mario, carlo e così via, esattamente come sarebbe successo usando l'operatore LIKE in una select sql classica.

  3. Luciano Gerdone
    0
    29-06-2018 12:42:56
    Rispondi

    Specificare .* o meno è indifferente, quindi scrivere

    db.users.find({"name": /.*an.*/})

    è uguale a scrivere

    db.users.find({"name": /an/})

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

Giuseppe Goletti

Giuseppe Goletti

Autore di questa domanda

 Domanda Precedente

 Elenco Domande 

Domanda Successiva