Amici, altro lancio del corso
Si è svolto il webinar
Funzionalità di MongoDB
MongoDB è un DBMS open source orientato ai documenti che non richiede una descrizione dello schema delle tabelle. È classificato come NoSQL e utilizza BSON (JSON binario). Scalabile immediatamente, scritto in C++ e supporta la sintassi JavaScript. Non c'è supporto SQL.
MongoDB dispone di driver per molti linguaggi di programmazione popolari (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, ecc.). Esistono anche driver non ufficiali e supportati dalla comunità per altri linguaggi di programmazione.
Bene, diamo un'occhiata ai comandi di base che possono essere utili.
Quindi, per distribuire MongoDB in Docker, noi scriviamo:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
Così accade lancio del cliente MongoDB:
Ora scriviamo quello tradizionale Ciao a tutti:
print (“Hello world!”)
Dopo di che - iniziamo il ciclo:
Come hai notato, prima di noi JS regolare, e MongoDB è un interprete JavaScript completo.
Quando utilizzare MongoDB?
Si racconta che la startup media nella Silicon Valley sia la persona che ha aperto il libro "HTML for Dummies" una settimana fa. Quale stack sceglierà? D'accordo che è molto conveniente per lui quando, per ovvi motivi, ha JavaScript nel suo browser, Node.js è in esecuzione sul server e JavaScript è anche in esecuzione nel database. Questo è il punto numero 1.
In secondo luogo, c'è
In terzo luogo, vorrei sottolineare che MongoDB si caratterizza per il bene scalabilità - e questa è una delle caratteristiche principali del database. Se non sai in anticipo quale sarà il carico, MongoDB è perfetto. Inoltre, supporta modelli pronti all'uso come sharding и replica, e tutto ciò è fatto in modo abbastanza trasparente, cioè è molto comodo lavorare.
Per quanto riguarda terminologia in MongoDB quindi:
- i database sono database (schemi, raccolte di tabelle);
- in MongoDB esiste qualcosa come коллекция - questo è un analogo di una tabella e di una serie di documenti che, logicamente, dovrebbero essere collegati;
- i documenti sono analoghi a una stringa.
Creazione di database e query semplici
Per creare un database, devi solo iniziare a usarlo:
use learn
Ora facciamo un piccolo inserto del documento. Lascia che sia, ad esempio, un unicorno di nome Aurora:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - un oggetto globale per l'accesso al database, ovvero, di fatto, il “monga” stesso. Utilizzato per lo sharding sh, per la replica - rs.
Quali comandi ha l'oggetto? db:
Torniamo quindi al nostro comando, a seguito del quale la console segnalerà che è stata inserita una riga:
Parola unicorns
in una squadra db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
denota una raccolta. Tieni presente che non abbiamo descritto o creato la raccolta, ma abbiamo semplicemente scritto "unicorni", fatto un inserto e abbiamo creato una raccolta.
Ed è così che possiamo ottieni tutte le nostre collezioni:
db.getCollectionNames()
E così via. Potere inserirne un altro collezione:
Ora chiediamo collezione completa (ti ricordiamo che nel nostro caso il database contiene già informazioni su due unicorni con lo stesso nome):
db.unicorns.find()
Tieni presente che ecco il nostro JSON (c'è un nome, un genere, un peso, un identificatore univoco dell'oggetto):
Ora inseriamo un altro paio di unicorni con gli stessi nomi:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
E vediamo cosa è successo:
Come puoi vedere, abbiamo campi aggiuntivi: home и verme, che Aurora non ha.
Aggiungiamo qualche altro unicorno:
db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63},
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43},
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182},
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])
Quindi, abbiamo inserito altri quattro oggetti utilizzando JavaScript:
Secondo te, in quali database è più conveniente conservare i dati del passaporto: database relazionali o Mongo?
La risposta è ovvia: a Monga, e l'esempio sopra lo dimostra bene. Non è un segreto che il KLADR sia una seccatura nella Federazione Russa. E Monga si adatta molto bene agli indirizzi, perché puoi impostare tutto come un array e la vita sarà molto più semplice. Ed è buono Caso utente per MongoDB.
Aggiungiamo altri unicorni:
db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80});
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40});
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39});
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2});
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33});
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54});
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'});
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});
Ora presta attenzione ai documenti. COME tamburellare Conserviamo interi oggetti. Ci sono anche informazioni su ciò che ama un unicorno e non tutti hanno queste informazioni. Quindi dentro si trova schiera completa.
A proposito, per visualizzare i risultati in modo più bello, puoi chiamare il metodo alla fine del comando di ricerca .pretty()
:
Se hai bisogno di ottenere informazioni sull'ultimo errore, utilizzare il seguente comando:
db.getLastError()
Questo può essere fatto dopo ogni inserimento oppure è possibile configurare Write Concern. È meglio leggerlo in
Passiamo a query più complesse
Richiedi il valore esatto del campo:
db.unicorns.find({gender: 'm'})
Scrivendo tale richiesta, riceveremo un elenco di tutti gli unicorni maschi nell'output della console.
Puoi anche farlo interrogare più campi contemporaneamente: per sesso e per peso:
Sopra, presta attenzione allo speciale Selettore $gt, che consente di allevare tutti gli unicorni maschi di peso superiore a 700.
Puoi controllare esiste davvero il campo?:
db.unicorns.find({vampires: {$exists: false}})
O così:
db.unicorns.find({'parents.father': {$exists: true}})
La prossima squadra tirerà fuori gli unicorni, i cui nomi iniziano con le lettere A o a:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Ora considera ricerca di array. Domanda n. 1: Cosa restituirà questo comando:
db.unicorns.find({loves:'apple'})
Esatto: tutti coloro che amano le mele.
Il seguente comando restituirà solo i dati unicorn contenenti solo mele e angurie:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
E un altro comando:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
Nel nostro caso non restituirà nulla, poiché quando passiamo un array, il primo elemento viene confrontato con il primo, il secondo con il secondo, ecc. Cioè, anche l'array deve corrispondere per posizione questi valori.
E questo è quello che sembra effettuare una ricerca in un array utilizzando l'operatore "OR".:
Il seguente esempio ce lo mostrerà cercare utilizzando l'operatore $all. E qui la sequenza non è importante:
Inoltre possiamo ricerca per dimensione dell'array:
Ma cosa succede se vogliamo trovare un array la cui dimensione è maggiore di uno? C'è un operatore per questo $dove, con cui puoi scrivere cose più complesse:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
A proposito, se vuoi esercitarti,
Funzionalità del cursore
Facciamo una piccola digressione e diciamo qualche parola sulle caratteristiche di Monga:
- find() e altre operazioni non restituiscono dati - restituiscono un cosiddetto "cursore";
- il fatto che vediamo i dati stampati è opera dell'interprete.
Digitando db.unicorns.find senza parentesi, otteniamo il prompt:
Continuiamo a soddisfare le richieste
Esiste anche l'operatore $in:
db.unicorns.find({weight: {$in: [650, 704]}})
Ora parliamo dell'aggiornamento. Ad esempio, cambiamo il peso dell'unicorno Roooodles:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Come risultato delle nostre azioni, il documento sarà completamente aggiornatoe al suo interno rimarrà solo un campo specificato:
Cioè, l'unica cosa che rimarrà per il nostro oggetto è il peso 2222 e, ovviamente, id.
Puoi correggere la situazione usando $ impostato:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
È anche possibile incrementare i valori:
E c'è capovolto - combinazione di aggiornamento e inserimento:
Ecco come è fatto selezione del campo:
Resta da aggiungere qualche parola a riguardo Salta и limitare:
Colleghi, questo è tutto, se volete conoscere i dettagli,
Fonte: habr.com