Apri il webinar "Nozioni di base su MongoDB"

Amici, altro lancio del corso "Banca dati" avrà luogo domani, per questo abbiamo tenuto una tradizionale lezione aperta, di cui potete vedere la registrazione qui. Questa volta abbiamo parlato del popolare database MongoDB: abbiamo studiato alcune sottigliezze, esaminato le basi del funzionamento, delle capacità e dell'architettura. Abbiamo anche accennato ad alcuni casi utente.

Apri il webinar "Nozioni di base su MongoDB"

Si è svolto il webinar Ivan Cintura, responsabile dello sviluppo server presso Citymobil.

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:

Apri il webinar "Nozioni di base su MongoDB"

Ora scriviamo quello tradizionale Ciao a tutti:

print (“Hello world!”)

Apri il webinar "Nozioni di base su MongoDB"

Dopo di che - iniziamo il ciclo:

Apri il webinar "Nozioni di base su MongoDB"

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'è grande esibizione Peter Zaitsev, uno dei migliori specialisti di database in Russia. In esso Peter parla di MySQL e MongoDB, prestando particolare attenzione a quando e cosa è meglio usare.

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

Apri il webinar "Nozioni di base su MongoDB"

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:

Apri il webinar "Nozioni di base su MongoDB"

Torniamo quindi al nostro comando, a seguito del quale la console segnalerà che è stata inserita una riga:

Apri il webinar "Nozioni di base su MongoDB"

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:

Apri il webinar "Nozioni di base su MongoDB"

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):

Apri il webinar "Nozioni di base su MongoDB"

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:

Apri il webinar "Nozioni di base su MongoDB"

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:

Apri il webinar "Nozioni di base su MongoDB"

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});

Apri il webinar "Nozioni di base su MongoDB"

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():

Apri il webinar "Nozioni di base su MongoDB"

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 documentazione ufficiale, che, tra l'altro, è molto istruttivo in Monga. A proposito, è disponibile anche su Habré buon articolo in questa occasione.

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:

Apri il webinar "Nozioni di base su MongoDB"

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".:

Apri il webinar "Nozioni di base su MongoDB"

Il seguente esempio ce lo mostrerà cercare utilizzando l'operatore $all. E qui la sequenza non è importante:

Apri il webinar "Nozioni di base su MongoDB"

Inoltre possiamo ricerca per dimensione dell'array:

Apri il webinar "Nozioni di base su MongoDB"

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, eccoti file con comandi.

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:

Apri il webinar "Nozioni di base su MongoDB"

Continuiamo a soddisfare le richieste

Esiste anche l'operatore $in:

db.unicorns.find({weight: {$in: [650, 704]}})

Apri il webinar "Nozioni di base su MongoDB"

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:

Apri il webinar "Nozioni di base su MongoDB"

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}})

Apri il webinar "Nozioni di base su MongoDB"

È anche possibile incrementare i valori:

Apri il webinar "Nozioni di base su MongoDB"

E c'è capovolto - combinazione di aggiornamento e inserimento:

Apri il webinar "Nozioni di base su MongoDB"

Ecco come è fatto selezione del campo:

Apri il webinar "Nozioni di base su MongoDB"

Apri il webinar "Nozioni di base su MongoDB"

Resta da aggiungere qualche parola a riguardo Salta и limitare:

Apri il webinar "Nozioni di base su MongoDB"

Colleghi, questo è tutto, se volete conoscere i dettagli, guarda l'intero video. E non dimenticare di lasciare i tuoi commenti!

Fonte: habr.com

Aggiungi un commento