Amics, un altre curs
Es va celebrar el webinar
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:
Ara anem a escriure el tradicional Hola món:
print (“Hello world!”)
Després d'això - comencem el cicle:
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
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
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:
Per tant, tornem a la nostra ordre, com a resultat de la qual cosa la consola informarà que s'ha inserit una línia:
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ó:
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):
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:
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:
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});
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()
:
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
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:
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".:
El següent exemple ens ho mostrarà cerca amb l'operador $all. I aquí la seqüència no té importància:
També podem cerca per mida de matriu:
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,
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:
Continuem complint les peticions
També hi ha l'operador $in:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
É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}})
També hi ha una possibilitat incrementar els valors:
I també n'hi ha enfadat - combinació d'actualització i inserció:
Així és com es fa selecció de camp:
Queda per afegir-hi unes paraules ometre и limitar:
Col·legues, això és tot, si en voleu conèixer els detalls,
Font: www.habr.com