Obre el seminari web "MongoDB Basics"

Amics, un altre curs "Base de dades" tindrà lloc demà, així que hem fet una tradicional lliçó oberta, la gravació de la qual podeu veure aquí. Aquesta vegada hem parlat de la popular base de dades MongoDB: hem estudiat algunes de les subtileses, hem observat els fonaments bàsics del funcionament, les capacitats i l'arquitectura. També hem parlat d'alguns casos d'usuari.

Obre el seminari web "MongoDB Basics"

Es va celebrar el webinar Ivan Cinturó, cap de desenvolupament de servidors de Citymobil.

Característiques de MongoDB

MongoDB és un SGBD de codi obert orientat a documents que no requereix una descripció de l'esquema de la taula. Està classificat com a NoSQL i utilitza BSON (JSON binari). Escalable fora de la caixa, escrit en C++ i admet la sintaxi de JavaScript. No hi ha suport SQL.

MongoDB té controladors per a molts llenguatges de programació populars (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, etc.). També hi ha controladors no oficials i compatibles amb la comunitat per a altres llenguatges de programació.

Bé, mirem les ordres bàsiques que poden ser útils.

Per tant, per desplegar MongoDB a Docker, nosaltres escrivim:

docker run -it --rm -p 127.0.0.1:27017:27017 
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo

Així passa llançament del client MongoDB:

Obre el seminari web "MongoDB Basics"

Ara anem a escriure el tradicional Hola món:

print (“Hello world!”)

Obre el seminari web "MongoDB Basics"

Després d'això - comencem el cicle:

Obre el seminari web "MongoDB Basics"

Com has notat, abans que nosaltres JS regular, i MongoDB és un intèrpret de JavaScript complet.

Quan utilitzar MongoDB?

Hi ha una història que la startup mitjana de Silicon Valley és la persona que va obrir el llibre "HTML for Dummies" fa una setmana. Quina pila triarà? D'acord que és molt convenient per a ell quan, per raons òbvies, té JavaScript al seu navegador, Node.js s'està executant al servidor i JavaScript també s'està executant a la base de dades. Aquest és el punt número 1.

En segon lloc, n'hi ha gran rendiment Peter Zaitsev, un dels millors especialistes en bases de dades a Rússia. En ell, Peter parla de MySQL i MongoDB, prestant especial atenció a quan i què és millor utilitzar.

En tercer lloc, m'agradaria subratllar que MongoDB es caracteritza pel bé escalabilitat - i aquesta és una de les característiques clau de la base de dades. Si no sabeu per endavant quina serà la càrrega, MongoDB és perfecte. A més, admet patrons fora de la caixa com ara fragmentació и replicació, i tot això es fa bastant transparent, és a dir, és molt convenient treballar.

Quant a terminologia a MongoDB aleshores:

  • les bases de dades són bases de dades (esquemes, col·leccions de taules);
  • a MongoDB hi ha tal cosa com la col·lecció - es tracta d'un anàleg d'una taula i d'un conjunt de documents que, lògicament, haurien d'estar connectats;
  • documents són anàlegs a una cadena.

Creació de bases de dades i consultes senzilles

Per crear una base de dades, només cal començar a utilitzar-la:

use learn

Obre el seminari web "MongoDB Basics"

Ara fem una petita inserció del document. Sigui, per exemple, un unicorn anomenat Aurora:

db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})

db - un objecte global per accedir a la base de dades, és a dir, de fet, la pròpia “monga”. S'utilitza per fragmentar sh, per a la replicació - rs.

Quines ordres té l'objecte? db:

Obre el seminari web "MongoDB Basics"

Per tant, tornem a la nostra ordre, com a resultat de la qual cosa la consola informarà que s'ha inserit una línia:

Obre el seminari web "MongoDB Basics"

Paraula unicorns en un equip db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) denota una col·lecció. Tingueu en compte aquí que no vam descriure ni crear la col·lecció, sinó que simplement vam escriure "unicorns", vam fer una inserció i vam tenir una col·lecció.

I així és com podem aconseguiu totes les nostres col·leccions:

db.getCollectionNames()

Etcètera. Llauna inseriu-ne un altre col · lecció:

Obre el seminari web "MongoDB Basics"

Ara preguntem col·lecció completa (us recordem que en el nostre cas la base de dades ja conté informació sobre dos unicorns amb el mateix nom):

db.unicorns.find()

Tingueu en compte que aquí teniu el nostre JSON (hi ha un nom, gènere, pes i algun identificador d'objecte únic):

Obre el seminari web "MongoDB Basics"

Ara inserim un parell d'unicorns més amb els mateixos noms:

db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false}) 
db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false})

I a veure què ha passat:

Obre el seminari web "MongoDB Basics"

Com podeu veure, tenim camps addicionals: casa и cuc, que Aurora no té.

Afegim uns quants unicorns més:

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

Per tant, hem inserit quatre objectes més amb JavaScript:

Obre el seminari web "MongoDB Basics"

Segons la teva opinió, en quines bases de dades és més convenient emmagatzemar les dades del passaport: bases de dades relacionals o Mongo?

La resposta és òbvia: a Monga, i l'exemple anterior ho mostra bé. No és cap secret que KLADR és un dolor a la Federació Russa. I Monga encaixa molt bé amb les adreces, perquè pots configurar-ho tot com a matriu i la vida serà molt més fàcil. I és una bona Cas d'usuari per a MongoDB.

Afegim més unicorns:

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

Obre el seminari web "MongoDB Basics"

Ara pareu atenció als documents. Com tambor Emmagatzemem objectes sencers. També hi ha informació sobre el que estima un unicorn, i no tothom té aquesta informació. Així que dins les mentides matriu completa.

Per cert, per mostrar els resultats de manera més bella, podeu trucar al mètode al final de l'ordre de cerca .pretty():

Obre el seminari web "MongoDB Basics"

Si cal aconseguir informació sobre l'últim error, utilitzeu l'ordre següent:

db.getLastError()

Això es pot fer després de cada inserció, o podeu configurar Write Concern. És millor llegir-ne sobre documentació oficial, que, per cert, és molt informatiu a Monga. Per cert, també està disponible a Habré bon article en aquesta ocasió.

Passem a consultes més complexes

Consulta el valor exacte del camp:

db.unicorns.find({gender: 'm'})

En escriure aquesta sol·licitud, rebrem una llista de tots els unicorns masculins a la sortida de la consola.

També pots fer-ho consulta en diversos camps alhora: per gènere i per pes:

Obre el seminari web "MongoDB Basics"

A dalt, presteu atenció a l'especial $gt selector, que permet criar tots els unicorns mascles que pesin més de 700.

Podeu comprovar el camp existeix?:

db.unicorns.find({vampires: {$exists: false}})

O bé:

db.unicorns.find({'parents.father': {$exists: true}})

El següent equip farà sortir els unicorns, els noms dels quals comencen amb les lletres A o a:

db.unicorns.find({name: {$regex: "^[Aa]"}})

Ara considerem-ho cerca de matrius. Pregunta núm. 1: què sortirà aquesta ordre:

db.unicorns.find({loves:'apple'})

És cert: tots els que estimen les pomes.

L'ordre següent retornarà només les dades d'unicorn que continguin només pomes i síndries:

db.unicorns.find({loves:[ "apple", "watermelon" ]})

I una ordre més:

db.unicorns.find({loves:[ "watermelon", "apple" ]})

En el nostre cas, no retornarà res, ja que quan passem una matriu, el primer element es compara amb el primer, el segon amb el segon, etc. És a dir, la matriu també ha de coincidir. per posició aquests valors.

I això és el que sembla cercar a través d'una matriu mitjançant l'operador "OR".:

Obre el seminari web "MongoDB Basics"

El següent exemple ens ho mostrarà cerca amb l'operador $all. I aquí la seqüència no té importància:

Obre el seminari web "MongoDB Basics"

També podem cerca per mida de matriu:

Obre el seminari web "MongoDB Basics"

Però, què passa si volem trobar una matriu la mida de la qual és més gran que un? Hi ha un operador per a això $on, amb la qual pots escriure coses més complexes:

db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })

Per cert, si vols practicar, aquí estàs fitxer amb ordres.

Característiques del cursor

Divaguem una mica i diguem algunes paraules sobre les característiques de Monga:

  • find() i altres operacions no retornen dades: retornen l'anomenat "cursor";
  • el fet de veure com s'imprimeixen les dades és feina de l'intèrpret.

Mecanografia db.unicorns.find sense parèntesis, obtenim la sol·licitud:

Obre el seminari web "MongoDB Basics"

Continuem complint les peticions

També hi ha l'operador $in:

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

Obre el seminari web "MongoDB Basics"

Ara parlem de l'actualització. Per exemple, canviem el pes de l'unicorn Rooooodles:

db.unicorns.update({name: "Roooooodles"}, {weight: 2222})

Com a resultat de les nostres accions, el document s'actualitzarà completament, i només hi quedarà un camp especificat:

Obre el seminari web "MongoDB Basics"

És a dir, l'únic que quedarà per al nostre objecte és el pes 2222 i, per descomptat, id.

Podeu corregir la situació utilitzant $conjunt:

db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})

Obre el seminari web "MongoDB Basics"

També hi ha una possibilitat incrementar els valors:

Obre el seminari web "MongoDB Basics"

I també n'hi ha enfadat - combinació d'actualització i inserció:

Obre el seminari web "MongoDB Basics"

Així és com es fa selecció de camp:

Obre el seminari web "MongoDB Basics"

Obre el seminari web "MongoDB Basics"

Queda per afegir-hi unes paraules ometre и limitar:

Obre el seminari web "MongoDB Basics"

Col·legues, això és tot, si en voleu conèixer els detalls, mira el vídeo sencer. I no oblideu deixar els vostres comentaris!

Font: www.habr.com

Afegeix comentari