Komme i gang med MongoDB - Del 1

Klar til å komme inn og begynne å lære om MongoDB, en av de kuleste teknologiene for webutviklere?

I denne nye serien går du fra nybegynner til pro og kan bruke Mongo like enkelt som MySQL i webappene dine. Men først, la oss se på det grunnleggende.


Hvorfor MongoDB?

Hva om du kan lagre programmatiske modeller nesten som du modeller dem?

I objektorientert utvikling oppfordres vi til å nærme seg kodeutvikling gjennom logiske modeller, slik at vi lettere kan konseptualisere det i vårt sinn. Når vi gjør dette, kan vi bedre forstå de logiske operasjonene som brukes til å samhandle med den og informasjon som den vil inneholde på forskjellige tidspunkter.

Hva om du kan lagre programmatiske modeller nesten som du modeller dem? Hva om du kan lagre dem som de er i stedet for i en rekke rader i tabeller? Ved å lære om MongoDB, vil du kunne gjøre nettopp det!

I denne serien lærer vi alt fra det grunnleggende om MongoDb, for eksempel å skape, oppdatere og slette databaser og poster, for å kunne utføre komplekse søk etter data og grunnleggende datautvinning med MapReduce. Så, uten mye ado - la oss komme i gang!

Merk: Denne opplæringen er utført fra perspektivet av NIX-baserte system a la Mac OSX, Linux BSD og så videre. Men du bør kunne følge med hvis du kjører Windows ganske bra, siden det er bygget for de fleste plattformer.


Trinn 1: Installere Mongo

Ok, så her er hvor moroa begynner. Vi kommer til å begynne med å installere Mongo. Gå til MongoDb nettside og klikk på nedlastingslinken.

Dette vil bringe deg til en side der du kan ta tak i en plattform og arkitektur.

Denne opplæringen dekker bare stabile utgivelser, så vær så snill å ikke ta en nattlig bygg. Når den er lastet ned, vennligst installer den etter behovene til plattformen.

Hvis du er på en Nix-maskin, vennligst bruk pakkebehandling for å installere den nyeste versjonen for plattformen.

Med det ut av veien, brann opp en terminal og skriv inn mongo. Det vil åpne opp Mongo-skallet og la oss komme i gang. Alt er bra, du vil se utganger som ligner nedenfor:

Hvis du ser det, så er du klar til å gå.


Trinn 2: Opprette en database / sette inn poster

I utgangspunktet er ingen database opprettet. Men ikke bekymre deg, de vil umiddelbart bli opprettet når vi begynner å sette inn våre poster, som vi skal gjøre akkurat nå. Kopier innholdet under og lim det inn i din mongo shell

db.nettuts.insert (first: 'matthew', sist: 'setter', dob: '21 / 04/1978 ', kjønn:' m ', hair_colour:' brown ', yrke:' developer ', nasjonalitet:' australsk '); db.nettuts.insert (first: 'james', sist: 'caan', dob: '26 / 03/1940 ', kjønn:' m ', hair_colour:' brown ', yrke:' skuespiller ', nasjonalitet:' amerikansk '); db.nettuts.insert (first: 'arnold', sist: 'schwarzenegger', dob: '03 / 06/1925 ', kjønn:' m ', hair_colour:' brown ', yrke:' skuespiller ', nasjonalitet:' amerikansk '); db.nettuts.insert (first: 'tony', sist: 'curtis', dob: '21 / 04/1978 ', kjønn:' m ', hair_colour:' brown ', yrke:' developer ', nasjonalitet:' amerikansk '); db.nettuts.insert (første: 'jamie lee', sist: 'curtis', dob: '22 / 11/1958 ', kjønn:' f ', hair_colour:' brown ', yrke:' skuespiller ', nasjonalitet: 'amerikansk'); db.nettuts.insert (first: 'michael', sist: 'caine', dob: '14 / 03/1933 ', kjønn:' m ', hair_colour:' brown ', yrke:' skuespiller ', nasjonalitet:' Engelsk' ); db.nettuts.insert (first: 'judi', sist: 'dench', dob: '09 / 12/1934 ', kjønn:' f ', hair_colour:' hvit ', yrke:' skuespillerinne ', nasjonalitet:' Engelsk' );

Helt fint? Utmerket! For å bekrefte at databasen og tilhørende poster er opprettet, skriv inn følgende kommando:

db.nettuts.find ()

Hvis alt gikk til plan, så ser du følgende utgang:

Dette viser at alle postene ble opprettet i databasen. En ting å merke seg før vi går videre er id felt. Dette genereres automatisk av Mongo for deg, hvis du ikke angir et ID. Årsaken er at hver post må ha en unik id felt.

Du kan se at vi har en post for hver av de som vi legger inn - nå er vi klare til å begynne å spørre dem.


Trinn 3: Søker etter poster

Husker du den forrige kommandoen? Den hentet og viste hver post i databasen. Nyttig, ja, men hvordan er du mer spesifikk? Hvordan finner du alle kvinnelige skuespillere, filtrerer ut mennene? Det er et godt spørsmål, og svaret er selektorer.

velgere

Selektorer er til Mongo hva hvor klausuler er til SQL. Som med hvor klausuler, lar Mongo selectors oss gjøre følgende:

  • spesifiser kriteriene som kamp. dvs. en OG klausul
  • spesifiser kriteriene som KAN valgfritt match. dvs. en ELLER klausul
  • spesifiser kriteriene som eksistere
  • og mye mer…

Records som må passe

La oss starte med en grunnvelger. Si at vi vil finne alle skuespillere som er kvinner
. For å oppnå dette må du kjøre følgende kommando:

db.nettuts.find (kjønn: 'f');

Her har vi angitt at kjønn må være lik 'f'.

Kjører denne kommandoen, returnerer følgende utgang:

Hva om vi ønsket å søke etter mannlige skuespillere? Kjør følgende kommando:

db.nettuts.find (kjønn: 'm');

Vi får følgende resultater:

Søker med flere kriterier

La oss få det opp i et hakk. Vi ser etter mannlige skuespillere som er engelsk.

db.nettuts.find (kjønn: 'm', $ eller: [nasjonalitet: 'engelsk']);

Kjører som vil returnere følgende resultater:

Hva med mannlige skuespillere som er engelsk eller amerikansk. Lett! La oss justere vår tidligere kommando for å inkludere amerikanerne:

db.nettuts.find (kjønn: 'm', $ eller: [nasjonalitet: 'engelsk', nasjonalitet: 'amerikansk']);

For den spørringen ser vi følgende resultater:


Trinn 4: Sortering av poster

Hva om vi vil sortere poster, si etter fornavn eller nasjonalitet? I likhet med SQL gir Mongo sortere kommando. Kommandoen, som finne Kommandoen tar en liste over alternativer for å bestemme sorteringsrekkefølgen.

I motsetning til SQL, angir vi imidlertid stigende og synkende annerledes. Vi gjør det som følger:

  • Stigende: -1
  • Nedadgående: 1

La oss ta en titt på et eksempel:

db.nettuts.find (kjønn: 'm', $ eller: [nasjonalitet: 'engelsk', nasjonalitet: 'amerikansk']). sort (nasjonalitet: -1);

Dette eksemplet henter alle mannlige, engelske eller amerikanske skuespillere og sorterer dem i synkende rekkefølge av nasjonalitet.

Hva med sortering etter nasjonalitet i synkende rekkefølge og navn i stigende rekkefølge? Ikke noe problem i det hele tatt! Ta en titt på spørringen nedenfor, som er en endret versjon av den siste vi kjørte.

db.nettuts.find (kjønn: 'm', $ eller: [nasjonalitet: 'engelsk', nasjonalitet: 'amerikansk']) sort (nasjonalitet: -1, først: 1);

Denne gangen henter vi følgende resultater et:

Du kan se at denne gangen Arnold Schwarzenegger er plassert foran Tony Curtis.


Trinn 5: Begrensning av poster

Hva om vi hadde et ganske stort datasett (heldig oss, det gjør vi ikke), og vi ønsket å begrense resultatene til bare 2? Mongo gir grensekommandoen, ligner MySQL, og lar oss gjøre nettopp det. La oss oppdatere vår forrige spørring og returnere bare 2 poster. Ta en titt på følgende kommando:

db.nettuts.find (kjønn: 'm', $ eller: [nasjonalitet: 'engelsk', nasjonalitet: 'amerikansk']) .grense (2);

Fra den kommandoen får vi følgende resultater:

Hvis vi ønsket den tredje og fjerde posten, dvs. hopp over de to første? Igjen har Mongo en funksjon for det. Ta en titt på den videre tilpasningen av den forrige kommandoen:

db.nettuts.find (kjønn: 'm', $ eller: [nasjonalitet: 'engelsk'), nasjonalitet: 'amerikansk']) .grense (2) .skip (2);

Kjører som vil returnere følgende resultater:

Du kan se fra det opprinnelige resultatsettet at de to første ble hoppet over.


Trinn 6: Oppdatering av poster

Som forventet gir Mongo muligheten til å oppdatere poster også. Som med finne metode og SQL-spørringer, må du angi kriteriene for posten du vil endre, da dataene i den posten som skal endres.

La oss si at vi trenger å oppdatere posten til James Caan og angi at håret hans er grå, ikke brun. Vel for det kjører vi oppdateringsfunksjonen. Ta en titt på eksemplet nedenfor:

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

Nå når du kjører det, hvis alt gikk bra, vil det ikke være noe å indikere om det var en suksess eller fiasko. For å finne ut om posten ble oppdatert riktig, må vi søke etter det. Så la oss gjøre det.

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

Etter dette ser du følgende resultat:

Dette viser at oppdateringen fungerte. Ett ord med forsiktighet skjønt, hvis du ikke passerer i $ sett modifier, så vil du erstatt posten, hvis den er tilgjengelig, i stedet for oppdaterer den. Vær forsiktig!


Trinn 7: Slette poster

Jeg tror på dette stadiet, du har virkelig begynt å få ideen om å jobbe med Mongo. Det er riktig, hvis du vil slette en post, må du passere i et sett med selektorer, som du også ville med SQL, for å bestemme settet av poster for å slette. Hvis du ikke gjør dette, vil du slette alle poster - og databasen.

Så, la oss si at vi ikke vil ha James Caan i vår liste over skuespillere. La oss fjerne ham fra databasen ved hjelp av følgende kommando:

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

Som med oppdateringen er det ikke gitt synlig produksjon for å indikere om vi var vellykkede eller ikke - så la oss gjøre et søk for å dobbeltsjekke.

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

Etter dette, bør du se ingen resultater returnert. Hvis det er det du har funnet, har vi vellykket slettet James Caan fra vår database. Men hva om vi vil slette alle postene fra databasen?

Vel, for å gjøre det, fjerner du bare velgerne fra forrige anrop for å fjerne, som nedenfor.

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

Etter å ha kjørt begge kommandoene over, ser vi ingen utgang, noe som indikerer at databasen, med alle poster, nå er fjernet.


Konklusjon

I denne raske introduksjonen til MongoDB så vi på:

  • Hva Mongo er
  • Slik installerer du det
  • Hvordan lage, finne, oppdatere og slette poster

Med denne kunnskapen kan du gå, øve og lære mer om denne fantastiske teknologien. Hvis du vil ha mer informasjon, kan du sjekke ut MongoDb nettsiden eller følge @mongodb på Twitter.

I neste veiledning skal vi begynne å lære mer om komplekse søk. Så hold deg innstilt og takk så mye for å lese.

Oppdater: Den andre delen av denne serien har blitt postet og kan bli funnet her.