Vrienden, weer een cursuslancering
Het webinar is gehouden
MongoDB-functies
MongoDB is een open source documentgeoriënteerd DBMS waarvoor geen beschrijving van het tabelschema vereist is. Het is geclassificeerd als NoSQL en maakt gebruik van BSON (binaire JSON). Out-of-the-box schaalbaar, geschreven in C++ en ondersteunt JavaScript-syntaxis. Er is geen SQL-ondersteuning.
MongoDB heeft stuurprogramma's voor veel populaire programmeertalen (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, etc.). Er zijn ook niet-officiële en door de gemeenschap ondersteunde stuurprogramma's voor andere programmeertalen.
Laten we eens kijken naar de basiscommando's die nuttig kunnen zijn.
Dus om MongoDB in Docker te implementeren, we schrijven:
docker run -it --rm -p 127.0.0.1:27017:27017
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo
Zo gebeurt het lancering van een klant MongoDB:
Laten we nu de traditionele schrijven Hallo Wereld:
print (“Hello world!”)
Daarna - laten we de cyclus starten:
Zoals je gemerkt hebt, vóór ons gewone JS, en MongoDB is een volwaardige JavaScript-interpreter.
Wanneer MongoDB gebruiken?
Er gaat een verhaal dat de gemiddelde startup in Silicon Valley degene is die een week geleden het boek ‘HTML for Dummies’ opende. Welke stapel zal hij kiezen? Ben het ermee eens dat het erg handig voor hem is als hij, om voor de hand liggende redenen, JavaScript in zijn browser heeft, Node.js op de server draait en JavaScript ook in de database draait. Dit is punt nummer 1.
Ten tweede is er
Ten derde zou ik willen benadrukken dat MongoDB wordt gekenmerkt door goed schaalbaarheid - en dit is een van de belangrijkste kenmerken van de database. Als je van tevoren niet weet wat de belasting zal zijn, is MongoDB perfect. Bovendien ondersteunt het kant-en-klare patronen zoals scherven и replicatie, en dit alles gebeurt vrij transparant, dat wil zeggen dat het erg handig is om te werken.
ten opzichte van terminologie in MongoDB dan:
- databases zijn databases (schema's, verzamelingen tabellen);
- in MongoDB bestaat er zoiets als коллекция - dit is een analoog van een tabel en een reeks documenten die logischerwijs met elkaar verbonden zouden moeten zijn;
- documenten zijn analoog aan een string.
Databasecreatie en eenvoudige query's
Om een database te maken, hoeft u deze alleen maar te gebruiken:
use learn
Laten we nu een kleine bijlage van het document maken. Laat het bijvoorbeeld een eenhoorn zijn genaamd Aurora:
db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
db - een globaal object voor toegang tot de database, dat wil zeggen in feite de “monga” zelf. Gebruikt voor scherven sh, voor replicatie - rs.
Welke commando's heeft het object? db:
Laten we dus terugkeren naar onze opdracht, waardoor de console zal melden dat er één regel is ingevoegd:
Woord unicorns
in een team db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})
duidt op een verzameling. Houd er rekening mee dat we de collectie niet hebben beschreven of gemaakt, maar simpelweg ‘eenhoorns’ hebben geschreven, een tussenvoegsel hebben gemaakt en we hadden een collectie.
En dit is hoe wij dat kunnen bekijk al onze collecties:
db.getCollectionNames()
Enzovoort. Kan plaats er nog een verzameling:
Laten we het nu vragen volledige collectie (we herinneren je eraan dat in ons geval de database al informatie bevat over twee eenhoorns met dezelfde naam):
db.unicorns.find()
Let op, hier is onze JSON (er is een naam, geslacht, gewicht, een unieke object-ID):
Laten we nu nog een paar eenhoorns met dezelfde namen invoegen:
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
db.unicorns.insert({name: 'Leto', gender: 'm',
home: 'Arrakeen', worm: false})
En laten we eens kijken wat er gebeurde:
Zoals u kunt zien, hebben we extra velden: home и worm, die Aurora niet heeft.
Laten we nog een paar eenhoorns toevoegen:
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}])
Daarom hebben we nog vier objecten ingevoegd met behulp van JavaScript:
In welke databases is het volgens u handiger om paspoortgegevens op te slaan: relationele databases of Mongo?
Het antwoord ligt voor de hand: in Monga, en het bovenstaande voorbeeld laat dit goed zien. Het is geen geheim dat KLADR een pijnpunt is in de Russische Federatie. En Monga past heel goed bij adressen, omdat je alles als een array kunt instellen, en het leven zal veel eenvoudiger zijn. En het is een goede Gebruikerscase voor MongoDB.
Laten we meer eenhoorns toevoegen:
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});
Let nu op de documenten. Als lancering Wij slaan hele objecten op. Er is ook informatie over waar een eenhoorn van houdt, en niet iedereen heeft deze informatie. Dus innerlijke leugens volledige reeks.
Om de resultaten mooier weer te geven, kun je de methode overigens aan het einde van de zoekopdracht aanroepen .pretty()
:
Als je het nodig hebt informatie over de laatste fout, gebruik dan het volgende commando:
db.getLastError()
Dit kan na elke invoeging worden gedaan, of u kunt Write Concern configureren. Het is beter om erover te lezen in
Laten we verder gaan met complexere zoekopdrachten
Query voor exacte veldwaarde:
db.unicorns.find({gender: 'm'})
Door een dergelijk verzoek te schrijven, ontvangen we een lijst met alle mannelijke eenhoorns in de console-uitvoer.
Je kunt het ook doen vraag op meerdere velden tegelijk: naar geslacht en naar gewicht:
Let hierboven op het bijzondere $gt-kiezer, waarmee je alle mannelijke eenhoorns kunt fokken die meer dan 700 wegen.
Je kunt controleren Bestaat het veld überhaupt?:
db.unicorns.find({vampires: {$exists: false}})
Of zo:
db.unicorns.find({'parents.father': {$exists: true}})
Het volgende team zal de eenhoorns tevoorschijn halen, wiens naam begint met de letters A of a:
db.unicorns.find({name: {$regex: "^[Aa]"}})
Laten we nu eens overwegen array zoeken. Vraag #1: Wat zal dit commando opleveren:
db.unicorns.find({loves:'apple'})
Dat klopt: iedereen die van appels houdt.
De volgende opdracht retourneert alleen de eenhoorngegevens die bevatten alleen appels en watermeloenen:
db.unicorns.find({loves:[ "apple", "watermelon" ]})
En nog een commando:
db.unicorns.find({loves:[ "watermelon", "apple" ]})
In ons geval zal het niets retourneren, want wanneer we een array doorgeven, wordt het eerste element vergeleken met het eerste, het tweede met het tweede, enz. Dat wil zeggen dat de array ook moet overeenkomen op positie deze waarden.
En dit is hoe het eruit ziet zoeken door een array met behulp van de operator "OR".:
Het volgende voorbeeld zal het ons laten zien zoeken met de operator $all. En hier is de volgorde onbelangrijk:
Ook wij kunnen dat zoeken op arraygrootte:
Maar wat als we een array willen vinden waarvan de grootte groter is dan één? Hiervoor bestaat een operator $waar, waarmee je complexere dingen kunt schrijven:
db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })
Trouwens, als je wilt oefenen,
Cursorfuncties
Laten we een beetje afdwalen en een paar woorden zeggen over de kenmerken van Monga:
- find() en andere bewerkingen retourneren geen gegevens - ze retourneren een zogenaamde “cursor”;
- het feit dat we zien dat de gegevens worden afgedrukt, is het werk van de tolk.
Typen db.unicorns.find zonder haakjes krijgen we de prompt:
Wij blijven verzoeken vervullen
Er is ook de operator $in:
db.unicorns.find({weight: {$in: [650, 704]}})
Laten we het nu hebben over updaten. Laten we bijvoorbeeld het gewicht van de Rooooodles-eenhoorn veranderen:
db.unicorns.update({name: "Roooooodles"}, {weight: 2222})
Als gevolg van onze acties is het document zal volledig worden bijgewerkt, en er blijft slechts één opgegeven veld in staan:
Dat wil zeggen, het enige dat overblijft voor ons object is het gewicht 2222 en natuurlijk id.
U kunt de situatie corrigeren met behulp van $ingesteld:
db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})
Het is ook mogelijk waarden verhogen:
En daar is opperen - combinatie van update en invoeging:
Hier is hoe het gedaan is veld selectie:
Er moeten nog een paar woorden over worden toegevoegd overspringen и begrenzing:
Collega's, dat is alles, als u de details wilt weten:
Bron: www.habr.com