Operatori condizionali MongoDB specificare una condizione a cui deve corrispondere il valore del campo del documento.
Operatori di query di confronto
- $ eq (uguale)
- $ne (non uguale)
- $gt (più di)
- $lt (minore di)
- $gte (più o uguale)
- $lte (minore o uguale)
- $ in definisce un array di valori, uno dei quali dovrebbe avere un campo documento
- $ nove definisce un array di valori che non dovrebbe avere un campo documento
Ad esempio, troveremo tutti i documenti con un valore chiave dell'età inferiore a 30:
db.users.find ({age: {$lt : 30}})
L'uso di altri operatori di confronto sarà simile. Ad esempio, la stessa chiave, solo più di 30:
db.users.find ({age: {$gt : 30}})
Nota che il confronto qui viene effettuato su tipi interi, non su stringhe. Se la chiave age rappresenta valori di stringa, il confronto dovrebbe essere eseguito sulle righe:db.users.find ({age:{$gt :“30”}}), ma il risultato sarà lo stesso.
Ma immaginiamo una situazione in cui dobbiamo trovare tutti i volumi con un valore del campo età maggiore di 30 ma minore di 50. In questo caso, possiamo combinare due operatori:
db.users.find ({age: {$gt : 30, $lt: 50}})
Troveremo utenti la cui età è 22:
db.users.find ({age: {$eq : 22}})
In sostanza, questa è l'analogia della prossima query:
db.users.find ({age: 22})
Operazione inversa:trova utenti la cui età NON ha 22 anni:
db.users.find ({age: {$ne : 22}})
L'operatore $in definisce un array di possibili espressioni e cerca quelle chiavi il cui valore è nell'array:
db.users.find ({age: {$in : [22, 32]}})
Al contrario, l'operatore $nin definisce un array di possibili espressioni e cerca quelle chiavi il cui valore è assente in questo array:
db.users.find ({età:{$nin :[22, 32]}})
Operatori logici
Gli operatori logici vengono eseguiti in condizioni di campionamento:
- $o :collega due condizioni e il documento deve soddisfare una di queste condizioni
- $e: collega due condizioni e il documento deve soddisfare entrambe le condizioni
- $non: il documento NON deve corrispondere alla condizione
- $né: collega due condizioni e il documento NON deve soddisfare entrambe le condizioni
Operatori di esempio MongoDB
L'operatore $or rappresenta un'operazione logica OR e definisce un insieme di coppie chiave-valore che dovrebbero essere presenti in un documento. E se un documento ha almeno una di queste coppie chiave-valore, corrisponde a questa query e viene estratto dal database:
db.users.find ({$or : [{name: "Tom"}, {age: 22}]})
Questa espressione restituirà tutti i documenti con nome=Tom o età=22.
Un altro esempio restituirà tutti i documenti con nome=Tom e età=22 o con "tedesco" tra i valori della lingua:
db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})
Gli operatori condizionali possono essere utilizzati in sottoespressioni o sottoespressioni:
db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})
In questo caso selezioniamo tutti i documenti in cui nome=”Tom” o il campo età ha un valore pari o superiore a 30.
Operatore $e
L'operatore $and rappresenta un'operazione logica AND (moltiplicazione logica) e definisce un insieme di criteri che un documento deve soddisfare. A differenza dell'operatore $or, il documento deve soddisfare tutti i criteri specificati. Ad esempio:
db.users.find ({$and : [{name: "Tom"}, {age: 32}]})
Qui i documenti selezionati devono avere il nome Tom e l'età di 32 anni, entrambe caratteristiche.
Ricerca nell'array MongoDB
Alcuni operatori sono progettati per funzionare con gli array:
- $tutti: definisce un insieme di valori che dovrebbero esistere in un array
- $dimensione: definisce il numero di elementi che dovrebbero trovarsi in un array
- $elemMatch: specifica la condizione a cui devono corrispondere gli elementi nell'array
MongoDB $tutti
L'operatore $all definisce un array di possibili espressioni e richiede che i documenti abbiano l'intero insieme definito di espressioni. Di conseguenza, viene utilizzato per cercare nell'array. Ad esempio, i documenti hanno una matrice di lingue che memorizza le lingue straniere parlate dall'utente. E per trovare tutte le persone che parlano inglese e francese contemporaneamente, possiamo usare la seguente espressione:
db.users.find ({languages: {$all : ["english", "french"]}})
Operatore $elemMatch
L'operatore $elemMatch ti consente di selezionare documenti in cui gli array contengono elementi che rientrano in determinate condizioni. Ad esempio, lascia che il database contenga una raccolta di valutazioni degli utenti per corsi specifici. Aggiungiamo alcuni documenti:
db.grades.insertMany([{student: "Tom", courses:[{name: "Java", grade: 5}, {name: "MongoDB", grade: 4}]},
{student: "Alice", courses:[{name: "C++", grade: 3}, {name: "MongoDB", grade: 5}]}))
Ogni documento ha una matrice, che a sua volta è costituita da documenti nidificati.
Ora troveremo studenti che hanno un voto superiore a 3 per il corso MongoDB:
db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})
Operatore $dimensione
L'operatore $size viene utilizzato per trovare documenti in cui gli array hanno un numero di elementi pari al valore di $size. Ad esempio, estraiamo tutti i documenti in cui sono presenti due elementi nell'array laguges:
db.users.find ({languages: {$size:2}})
Tale query corrisponderà, ad esempio, al seguente documento:
{"name": "Tom", "age": 32, languages: ["english", "german"]}
L'operatore $esiste
L'operatore $exists permette di estrarre solo quei documenti in cui una determinata chiave è presente o assente. Ad esempio, restituisci tutti i documenti che contengono la chiave aziendale:
db.users.find ({company: {$exists:true}})
Se specifichiamo $exists come parametro false, la query ci restituirà solo quei documenti che non contengono la chiave aziendale.
Tipo $ operatore
L'operatore $type estrae solo quei documenti in cui una determinata chiave ha un valore di un certo tipo, ad esempio una stringa o un numero:
db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})
Operatore $regex
L'operatore $regex specifica un'espressione regolare a cui deve corrispondere il valore del campo . Ad esempio, lascia che il nome del campo abbia necessariamente la lettera "b":
db.users.find ({name: {$regex: "b"}})
È importante capire che $regex non accetta solo stringhe, ma espressioni regolari, ad esempio:nome:{$regex:“om$”} – il valore di nome deve terminare con “om”.