Öppna webbseminarium "MongoDB Basics"

Vänner, ännu en kurslansering "Databas" kommer att äga rum imorgon, så vi höll en traditionell öppen lektion, vars inspelning du kan se här. Den här gången pratade vi om den populära MongoDB-databasen: vi studerade några av subtiliteterna, tittade på grunderna för drift, kapacitet och arkitektur. Vi berörde också några användarfall.

Öppna webbseminarium "MongoDB Basics"

Webinariet hölls Ivan Bält, chef för serverutveckling på Citymobil.

MongoDB-funktioner

MongoDB är ett dokumentorienterat DBMS med öppen källkod som inte kräver en beskrivning av tabellschemat. Den klassificeras som NoSQL och använder BSON (binär JSON). Skalbar ur lådan, skriven i C++ och stöder JavaScript-syntax. Det finns inget SQL-stöd.

MongoDB har drivrutiner för många populära programmeringsspråk (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby, etc.). Det finns också inofficiella och community-stödda drivrutiner för andra programmeringsspråk.

Tja, låt oss titta på de grundläggande kommandona som kan vara användbara.

Så att distribuera MongoDB i Docker, vi skriver:

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

Så blir det klientlansering MongoDB:

Öppna webbseminarium "MongoDB Basics"

Låt oss nu skriva den traditionella Hej Världen:

print (“Hello world!”)

Öppna webbseminarium "MongoDB Basics"

Efter det - låt oss starta cykeln:

Öppna webbseminarium "MongoDB Basics"

Som du märkte, före oss vanlig JS, och MongoDB är en fullfjädrad JavaScript-tolk.

När ska man använda MongoDB?

Det finns en historia att den genomsnittliga startupen i Silicon Valley är den person som öppnade boken "HTML for Dummies" för en vecka sedan. Vilken stack kommer han att välja? Håller med om att det är väldigt bekvämt för honom när han av förklarliga skäl har JavaScript i sin webbläsare, Node.js körs på servern och även JavaScript körs i databasen. Det här är punkt nummer 1.

För det andra finns det bra prestation Peter Zaitsev, en av de bästa databasspecialisterna i Ryssland. I den pratar Peter om MySQL och MongoDB, med särskild uppmärksamhet på när och vad som är bäst att använda.

För det tredje vill jag betona att MongoDB kännetecknas av bra skalbarhet - och detta är en av de viktigaste funktionerna i databasen. Om du inte vet i förväg vad belastningen blir är MongoDB perfekt. Dessutom stöder den out-of-the-box mönster som t.ex skärning и replikering, och allt detta görs ganska transparent, det vill säga det är väldigt bekvämt att arbeta.

med avseende på terminologi i MongoDB då:

  • databaser är databaser (scheman, tabellsamlingar);
  • i MongoDB finns det något sådant som en samling - detta är en analog av en tabell och en uppsättning dokument som logiskt sett borde kopplas ihop;
  • dokument är analoga med en sträng.

Skapande av databas och enkla frågor

För att skapa en databas behöver du bara börja använda den:

use learn

Öppna webbseminarium "MongoDB Basics"

Låt oss nu göra en liten infogning av dokumentet. Låt det till exempel vara en enhörning som heter Aurora:

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

db - ett globalt objekt för åtkomst till databasen, det vill säga i själva verket själva "mongan". Används för skärning sh, för replikering - rs.

Vilka kommandon har objektet? db:

Öppna webbseminarium "MongoDB Basics"

Så låt oss återgå till vårt kommando, som ett resultat av vilket konsolen kommer att rapportera att en rad har infogats:

Öppna webbseminarium "MongoDB Basics"

Ord unicorns i ett lag db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) betecknar en samling. Observera här att vi inte beskrev eller skapade samlingen, utan bara skrev "enhörningar", gjorde en insert och vi hade en samling.

Och det är så här vi kan få alla våra samlingar:

db.getCollectionNames()

Och så vidare. Burk sätt in en till samling:

Öppna webbseminarium "MongoDB Basics"

Låt oss nu fråga komplett samling (vi påminner om att i vårt fall innehåller databasen redan information om två enhörningar med samma namn):

db.unicorns.find()

Observera att här är vår JSON (det finns ett namn, kön, vikt, någon unik objektidentifierare):

Öppna webbseminarium "MongoDB Basics"

Låt oss nu infoga ytterligare ett par enhörningar med samma namn:

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

Och låt oss se vad som hände:

Öppna webbseminarium "MongoDB Basics"

Som du kan se har vi ytterligare fält: hem и Masken, som Aurora inte har.

Låt oss lägga till några fler enhörningar:

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

Så vi infogade ytterligare fyra objekt med JavaScript:

Öppna webbseminarium "MongoDB Basics"

Enligt din åsikt, i vilka databaser är det lämpligare att lagra passdata: relationsdatabaser eller Mongo?

Svaret är uppenbart - i Monga, och exemplet ovan visar detta väl. Det är ingen hemlighet att KLADR är en plåga i Ryska federationen. Och Monga passar väldigt bra med adresser, eftersom du kan ställa in allt som en array, och livet blir mycket lättare. Och det är en bra sådan Användarfall för MongoDB.

Låt oss lägga till fler enhörningar:

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

Öppna webbseminarium "MongoDB Basics"

Var nu uppmärksam på dokumenten. Som lansering Vi lagrar hela föremål. Det finns också information om vad en enhörning älskar, och inte alla har denna information. Så inuti ligger full array.

Förresten, för att visa resultaten vackrare kan du anropa metoden i slutet av sökkommandot .pretty():

Öppna webbseminarium "MongoDB Basics"

Om du behöver få information om det senaste felet, använd följande kommando:

db.getLastError()

Detta kan göras efter varje infogning, eller så kan du konfigurera Write Concern. Det är bättre att läsa om det officiell dokumentation, som för övrigt är väldigt informativt i Monga. Förresten, den finns även på Habré bra artikel om detta.

Låt oss gå vidare till mer komplexa frågor

Fråga efter exakt fältvärde:

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

Genom att skriva en sådan begäran kommer vi att få en lista över alla manliga enhörningar i konsolutgången.

Du kan också göra fråga på flera fält samtidigt: efter kön och vikt:

Öppna webbseminarium "MongoDB Basics"

Ovan, var uppmärksam på det speciella $gt väljare, vilket låter dig föda upp alla enhörningar av hankön som väger mer än 700.

Du kan kolla finns fältet överhuvudtaget?:

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

Eller så:

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

Nästa lag kommer att ta fram enhörningarna, vars namn börjar med bokstäverna A eller a:

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

Låt oss nu överväga arraysökning. Fråga #1: Vad kommer detta kommando att mata ut:

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

Det stämmer: alla som älskar äpplen.

Följande kommando returnerar endast de enhörningsdata som innehåller endast äpplen och vattenmeloner:

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

Och ytterligare ett kommando:

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

I vårt fall kommer det inte att returnera något, eftersom när vi passerar en array jämförs det första elementet med det första, det andra med det andra etc. Det vill säga att arrayen också måste matcha efter position dessa värden.

Och så här ser det ut söka igenom en array med "OR"-operatorn:

Öppna webbseminarium "MongoDB Basics"

Följande exempel kommer att visa oss sök med $all-operatorn. Och här är sekvensen oviktig:

Öppna webbseminarium "MongoDB Basics"

Det kan vi också sök efter matrisstorlek:

Öppna webbseminarium "MongoDB Basics"

Men vad händer om vi vill hitta en array vars storlek är större än en? Det finns en operatör för detta $var, som du kan skriva mer komplexa saker med:

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

Förresten, om du vill träna, där är du fil med kommandon.

Markörens funktioner

Låt oss avvika lite och säga några ord om funktionerna i Monga:

  • find() och andra operationer returnerar inte data - de returnerar en så kallad "markör";
  • det faktum att vi ser att uppgifterna skrivs ut är tolkens arbete.

Skriver db.unicorns.find utan parentes får vi uppmaningen:

Öppna webbseminarium "MongoDB Basics"

Vi fortsätter att uppfylla förfrågningar

Det finns också $in-operatorn:

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

Öppna webbseminarium "MongoDB Basics"

Låt oss nu prata om uppdatering. Låt oss till exempel ändra vikten på Rooooodles-enhörningen:

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

Som ett resultat av våra handlingar, dokumentet kommer att uppdateras helt, och endast ett specificerat fält kommer att finnas kvar i det:

Öppna webbseminarium "MongoDB Basics"

Det vill säga, det enda som kommer att finnas kvar för vårt objekt är vikten 2222 och, naturligtvis, id.

Du kan korrigera situationen med hjälp av $set:

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

Öppna webbseminarium "MongoDB Basics"

Det är också möjligt öka värden:

Öppna webbseminarium "MongoDB Basics"

Och där är upprörd - kombination av uppdatering och infogning:

Öppna webbseminarium "MongoDB Basics"

Så här går det till val av fält:

Öppna webbseminarium "MongoDB Basics"

Öppna webbseminarium "MongoDB Basics"

Det återstår att lägga till några ord om hoppa и begränsa:

Öppna webbseminarium "MongoDB Basics"

Kollegor, det är allt, om ni vill veta detaljerna, se hela videon. Och glöm inte att lämna dina kommentarer!

Källa: will.com

Lägg en kommentar