Komma igång med MongoDB - Del 1

Klar för att komma in och börja lära om MongoDB, en av de coolaste teknikerna för webbutvecklare?

I den här nya serien går du från nybörjare till pro och kan använda Mongo lika enkelt som MySQL i dina webbapps. Men först, låt oss titta på grunderna.


Varför MongoDB?

Om du skulle kunna lagra de programmatiska modellerna nästan som du modellerar dem?

I objektorienterad utveckling uppmanas vi att närma oss kodutveckling genom logiska modeller, så att vi lättare kan konceptualisera det i vårt sinne. När vi gör det, kan vi bättre skilja de logiska operationer som används för att interagera med den och information som den skulle innehålla vid olika tidpunkter.

Vad händer om du kan lagra programmatiska modeller nästan som du modellerar dem? Vad händer om du kan lagra dem som de är istället för i en rad rader i tabeller? Genom att lära sig om MongoDB, kommer du att kunna göra just det!

I denna serie lär vi oss allt från grunderna i MongoDb, som att skapa, uppdatera och ta bort databaser och poster, för att kunna utföra komplexa sökningar efter data och elementär datautvinning med MapReduce. Så, utan mycket ado - låt oss komma igång!

Notera: Denna handledning utförs ur perspektivet av NIX-baserade system a la Mac OSX, Linux BSD och så vidare. Men du borde kunna följa med om du kör Windows ganska bra eftersom det finns byggnader för de flesta plattformar.


Steg 1: Installera Mongo

Ok, så här är där kulan börjar. Vi ska börja med att installera Mongo. Gå till MongoDb hemsida och klicka på hämtningslänken.

Detta kommer att ta dig till en sida där du kan ta en bygg för din plattform och arkitektur.

Denna handledning täcker bara stabila utgåvor, så snälla ta inte en nattlig byggnad. När den har laddats ner, var god installera den enligt kraven på din plattform.

Om du är på en Nix-maskin, använd sedan pakethanteraren för att installera den senaste versionen för din plattform.

Med det ur vägen, skjuter du upp en terminal och skriver in mongo. Det kommer att öppna upp Mongo-skalet och låt oss komma igång. Allt är bra, du ser produktionen som nedan:

Om du ser det är du redo att gå.


Steg 2: Skapa en databas / Sätta in poster

Ursprungligen skapas ingen databas. Men oroa dig inte, de kommer omedelbart att skapas när vi börjar sätta in våra poster, som vi ska göra just nu. Kopiera innehållet nedan och klistra in det i din mongo skal

db.nettuts.insert (first: 'matthew', sista: 'setter', dob: '21 / 04/1978 ', kön:' m ', hårfärg:' brun ', yrke:' utvecklare ', nationalitet:' australiensiska); db.nettuts.insert (first: 'james', sist: 'caan', dob: '26 / 03/1940 ', kön:' m ', hårfärg:' brun ', yrke:' skådespelare ', nationalitet:' amerikanska "); db.nettuts.insert (first: 'arnold', sist: 'schwarzenegger', dob: '03 / 06/1925 ', kön:' m ', hårfärg:' brun ', yrke:' skådespelare ', nationalitet:' amerikanska "); db.nettuts.insert (first: 'tony', sist: 'curtis', dob: '21 / 04/1978 ', kön:' m ', hårfärg:' brun ', yrke:' utvecklare ', nationalitet: amerikanska "); db.nettuts.insert (första: 'jamie lee', sista: 'curtis', dob: '22 / 11/1958 ', kön:' f ', hårfärg:' brun ', yrke:' skådespelare ' "amerikansk"); db.nettuts.insert (första: 'michael', sista: 'caine', dob: '14 / 03/1933 ', kön:' m ', hårfärg:' brun ', yrke:' skådespelare ', nationalitet:' engelsk' ); db.nettuts.insert (first: 'judi', sist: 'dench', dob: '09 / 12/1934 ', kön:' f ', hair_colour:' white ', ockupation:' skådespelerska ', nationalitet:' engelsk' );

Allt väl? Excellent! För att bekräfta att databasen och åtföljande poster har skapats, skriv in följande kommando:

db.nettuts.find ()

Om allt gick till plan, så ser du följande utmatning:

Detta visar att alla poster skapades i databasen. En sak att notera innan vi går längre är id fält. Detta skapas automatiskt av Mongo för dig, om du inte anger ett ID. Anledningen är att varje rekord måste ha en unik id fält.

Du kan se att vi har en post för var och en som vi lägger in - nu är vi redo att börja fråga dem.


Steg 3: Söka efter poster

Kommer du ihåg det föregående kommandot? Den hämtade och visade varje post i databasen. Hjälpsamt, ja, men hur är du mer specifik? Hur hittar du alla kvinnliga aktörer, filtrerar ut männen? Det är en bra fråga och svaret är väljare.

väljare

Väljare är att Mongo vad var klausuler är till SQL. Som med var klausuler tillåter Mongo väljare oss att göra följande:

  • specificera kriterier som MÅSTE match. d.v.s. en OCH klausul
  • specificera kriterier som KAN valfritt matchning. d.v.s. en ELLER klausul
  • specificera kriterier som MÅSTE existera
  • och mycket mera…

Rekord som måste matcha

Låt oss börja med en grundläggande väljare. Säg att vi vill hitta alla aktörer som är kvinnliga
. För att uppnå det måste du köra följande kommando:

db.nettuts.find (kön: 'f');

Här har vi angett att kön måste vara lika med "f".

Om du kör det här kommandot kommer du att returnera följande utdata:

Vad händer om vi vill söka efter manliga aktörer? Kör följande kommando:

db.nettuts.find (kön: 'm');

Vi får följande resultat:

Söka med flera kriterier

Låt oss kliva upp det. Vi letar efter manliga skådespelare som är engelska.

db.nettuts.find (kön: 'm', $ eller: [nationalitet: 'engelska']);

Running som kommer att returnera följande resultat:

Vad sägs om manliga aktörer som är engelska eller amerikanska. Lätt! Låt oss justera vårt tidigare kommando för att inkludera amerikanerna:

db.nettuts.find (kön: 'm', $ eller: [nationalitet: 'engelska', nationalitet: 'american']);

För den frågan ser vi följande resultat:


Steg 4: Sortera poster

Vad händer om vi vill sortera poster, säga med förnamn eller nationalitet? Liksom SQL ger Mongo sortera kommando. Kommandot, som hitta Kommandot tar en lista med alternativ för att bestämma sorteringsordningen.

Till skillnad från SQL anger vi dock stigande och fallande på olika sätt. Vi gör det enligt följande:

  • Stigande: -1
  • Descending: 1

Låt oss ta en titt på ett exempel:

db.nettuts.find (kön: 'm', $ eller: [nationalitet: 'engelska', nationalitet: 'amerikansk']) sort (nationalitet: -1);

Detta exempel hämtar alla manliga, engelska eller amerikanska aktörer och sorterar dem i fallande nationalitetsordning.

Vad sägs om sortering efter nationalitet i fallande ordning och namn i stigande ordning? Inga problem alls! Ta en titt på frågan nedan, vilken är en modifierad version av den sista vi körde.

db.nettuts.find (kön: 'm', $ eller: [nationalitet: 'engelska', nationalitet: 'amerikansk']) sort (nationalitet: -1, först: 1);

Den här gången hämtar vi följande resultat et:

Du kan se att den här gången Arnold Schwarzenegger är placerad före Tony Curtis.


Steg 5: Begränsande poster

Vad händer om vi hade en ganska stor dataset (lycka oss, det gör vi inte) och vi ville begränsa resultaten till bara 2? Mongo tillhandahåller gränskontrollen, liknar MySQL och tillåter oss att göra just det. Låt oss uppdatera vår tidigare fråga och returnera bara 2 poster. Ta en titt på följande kommando:

db.nettuts.find (kön: 'm', $ eller: [nationalitet: 'engelska', nationalitet: 'amerikansk']) .gräns (2);

Från det här kommandot får vi följande resultat:

Om vi ​​ville ha den tredje och fjärde posten, dvs hoppa över de första två? Återigen har Mongo en funktion för det. Ta en titt på den ytterligare anpassningen av det föregående kommandot:

db.nettuts.find (kön: 'm', $ eller: [nationalitet: 'engelska', nationalitet: 'amerikansk']) .gräns (2) .fart (2);

Running som kommer att returnera följande resultat:

Du kan se från den ursprungliga resultatuppsättningen att de första två hoppades över.


Steg 6: Uppdatering av poster

Som förväntat ger Mongo ett alternativ att uppdatera poster också. Som med hitta metod och SQL-frågor måste du ange kriterierna för den post som du vill ändra, då data i den posten som ska ändras.

Låt oss säga att vi behöver uppdatera posten för James Caan och ange att hans hår är grått, inte brunt. Nåväl driver vi uppdateringsfunktionen. Ta en titt på exemplet nedan:

db.nettuts.update (first: 'james', sist: 'caan', $ set: hair_colour: 'brown');

Nu när du kör det, om allt gick bra, kommer det inte att vara något som visar om det var en succé eller ett misslyckande. För att få reda på om posten uppdaterades korrekt måste vi söka efter det. Så låt oss göra det.

db.nettuts.find (first: 'james', sist: 'caan');

Efter detta ser du följande resultat:

Detta visar att uppdateringen fungerade. Ett ord av försiktighet, om du inte passerar in i $ set modifierare, då kommer du ersätt posten, om det är tillgängligt istället för uppdatera den. Var försiktig!


Steg 7: Radera poster

Jag tror att du på detta stadium verkligen har börjat få idén att arbeta med Mongo. Det är rätt, om du vill radera en post måste du passera i en uppsättning selektörer, som du också skulle med SQL, för att bestämma uppsättningen poster som ska raderas. Om du inte gör det, raderar du alla poster - och databasen.

Så, låt oss säga att vi inte vill ha James Caan i vår lista över skådespelare. Låt oss ta bort honom från databasen med följande kommando:

db.nettuts.remove (first: 'james', sist: 'caan');

Precis som med uppdateringen finns ingen synlig utgång för att ange om vi lyckades eller inte - så låt oss söka dubbelkontroll.

db.nettuts.find (first: 'james', sist: 'caan');

Efter detta ska du se inga resultat returnerade. Om det är vad du har hittat, har vi framgångsrikt tagit bort James Caan från vår databas. Men vad händer om vi vill radera alla poster från databasen?

Tja, för att göra det, ta bara bort väljarna från det föregående samtalet för att ta bort, som nedan.

db.nettuts.remove (); db.nettuts.find ();

Efter att ha kört båda kommandona ovan ser vi ingen utdata, vilket indikerar att databasen med alla poster har tagits bort.


Slutsats

I denna snabba introduktion till MongoDB såg vi på:

  • Vad Mongo är
  • Så här installerar du det
  • Hur man skapar, hittar, uppdaterar och tar bort poster

Med denna kunskap kan du gå, träna och lära dig mer om denna underbara teknik. Om du vill ha mer information, kan du kolla in MongoDb-webbplatsen eller följ @mongodb på Twitter.

I nästa handledning kommer vi att börja lära oss mer om komplexa frågor. Så håll dig stillad och tack så mycket för att läsa.

Uppdatering: Den andra delen av serien har skrivits och kan hittas här.