En introduksjon til Mongoose for MongoDB og Node.js

Mongoose er et JavaScript-rammeverk som vanligvis brukes i en Node.js-applikasjon med en MongoDB-database. I denne artikkelen skal jeg introdusere deg til Mongoose og MongoDB, og enda viktigere hvor disse teknologiene passer inn i søknaden din.

Hva er MongoDB?

La oss starte med MongoDB. MongoDB er en database som lagrer dataene dine som dokumenter. Vanligvis ligner disse dokumentene en JSON-lignende struktur:

firstName: "Jamie", etternavn: "Munro"

Et dokument er da plassert i en samling. Som et eksempel definerer ovennevnte dokumenteksempel a bruker gjenstand. Dette bruker objekt ville da typisk være en del av en samling som heter brukere.

En av nøkkelfaktorene med MongoDB er dens fleksibilitet når det gjelder struktur. Selv om i det første eksemplet, bruker objekt inneholdt a fornavn og etternavn Eiendom, disse egenskapene er ikke påkrevet i alle bruker dokument som er en del av brukere samling. Dette gjør MongoDB veldig forskjellig fra en SQL-database som MySQL eller Microsoft SQL Server som krever et sterkt definert databaseskema for hver gjenstand det lagrer.

Evnen til å lage dynamiske objekter som er lagret som dokumenter i databasen er hvor Mongoose kommer inn i spill.

Hva er Mongoose?

Mongoose er et Object Document Mapper (ODM). Dette betyr at Mongoose lar deg definere objekter med et sterkt skrevet skjema som er kartlagt til et MongoDB-dokument.

Mongoose gir en utrolig mengde funksjonalitet rundt å skape og arbeide med skjemaer. Mongoose inneholder for tiden åtte SchemaTypes at en eiendom er lagret som når den fortsetter å MongoDB. De er:

  1. string
  2. Nummer
  3. Dato
  4. Buffer
  5. boolean
  6. blandet
  7. Objekt
  8. Array

Hver datatype lar deg spesifisere:

  • en standardverdi
  • en egendefinert valideringsfunksjon
  • angi et felt er nødvendig
  • en get-funksjon som lar deg manipulere dataene før den returneres som et objekt
  • en innstilt funksjon som lar deg manipulere dataene før den lagres i databasen
  • opprett indekser slik at data hentes raskere

I tillegg til disse vanlige alternativene, tillater visse datatyper å tilpasse hvordan dataene lagres og hentes fra databasen. For eksempel a string Datatypen lar deg også spesifisere følgende tilleggsalternativer:

  • konvertere den til små bokstaver
  • konvertere den til store versjoner
  • trim data før lagring
  • et vanlig uttrykk som kan begrense data som skal lagres under valideringsprosessen
  • en enum som kan definere en liste over strenger som er gyldige

De Nummer og Dato Egenskaper både støtte angir minimum og maksimum verdi som er tillatt for det aktuelle feltet.

De fleste av de åtte tillatte datatyper skal være ganske kjent for deg. Det er imidlertid flere unntak som kan hoppe ut til deg, for eksempel Buffer, blandet, Objekt, og Array.

De Buffer Datatype lar deg lagre binære data. Et vanlig eksempel på binær data ville være et bilde eller en kodet fil, for eksempel et PDF-dokument.

De blandet Datatype gjør eiendommen til et "alt går" -felt. Dette feltet ligner hvor mange utviklere som kan bruke MongoDB fordi det ikke er noen definert struktur. Vær forsiktig med å bruke denne datatypen, da den mister mange av de flotte funksjonene som Mongoose gir, for eksempel data validering og deteksjon av enhetsendringer for automatisk å vite for å oppdatere eiendommen når du sparer.

De Objekt Datatype spesifiserer vanligvis en lenke til et annet dokument i databasen. Hvis du for eksempel hadde en samling av bøker og forfattere, kan bokdokumentet inneholde en Objekt eiendom som refererer til den spesifikke forfatteren av dokumentet.

De Array Datatype lar deg lagre JavaScript-lignende arrays. Med en Array datatype kan du utføre vanlige JavaScript-arrayoperasjoner på dem, for eksempel push, pop, shift, slice, etc..

Quick Recap

Før jeg gikk videre og genererte kode, ville jeg bare gjenskape det vi nettopp lært. MongoDB er en database som lar deg lagre dokumenter med en dynamisk struktur. Disse dokumentene lagres i en samling.

Mongoose er et JavaScript-bibliotek som lar deg definere skjemaer med kraftig skrevet data. Når et skjema er definert, lar Mongoose deg lage en modell basert på et bestemt skjema. En Mongoose-modell blir deretter kartlagt til et MongoDB-dokument via modellens skjemadefinisjon.

Når du har definert skjemaer og modeller, inneholder Mongoose mange forskjellige funksjoner som lar deg validere, lagre, slette og spørre dataene dine ved hjelp av vanlige MongoDB-funksjoner. Jeg snakker om dette mer med konkrete kodeeksempler som skal følges.

Installere MongoDB

Før vi kan begynne å lage våre Mongoose skjemaer og modeller, må MongoDB installeres og konfigureres. Jeg foreslår at du besøker MongoDBs nedlastingsside. Det er flere alternativer tilgjengelig for installasjon. Jeg har koblet til Community Server. Dette lar deg installere en versjon som er spesifikk for operativsystemet ditt. MongoDB tilbyr også en Enterprise Server og en cloud support installasjon. Siden hele bøkene kunne skrives om installering, innstilling og overvåkning av MongoDB, skal jeg holde fast hos Community Server.

Når du har lastet ned og installert MongoDB for ditt valgte operativsystem, må du starte databasen. I stedet for å gjenoppfinne hjulet, foreslår jeg at du besøker MongoDBs dokumentasjon om hvordan du installerer MongoDB Community Edition.

Jeg venter her mens du konfigurerer MongoDB. Når du er klar, kan vi fortsette å sette opp Mongoose for å koble til din nylig installerte MongoDB-database.

Sette opp Mongoose

Mongoose er et JavaScript-rammeverk, og jeg skal bruke det i en Node.js-applikasjon. Hvis du allerede har Node.js installert, kan du gå videre til neste trinn. Hvis du ikke har Node.js installert, foreslår jeg at du begynner å besøke Node.js nedlastingsside og velge installasjonsprogrammet for operativsystemet ditt.

Med Node.js satt opp og klar til å gå, skal jeg lage en ny applikasjon og deretter installere Mongoose NPM Package.

Med en ledetekst som er satt til der du ønsker at programmet skal installeres, kan du kjøre følgende kommandoer:

mkdir mongoose_basics cd mongoose_basics npm init

For initialiseringen av programmet min, forlot jeg alt som standardverdiene. Nå skal jeg installere mongoose-pakken som følger:

npm installere mongoose - save

Med alle forutsetninger konfigurert, la oss koble til en MongoDB-database. Jeg har plassert følgende kode i en index.js-fil fordi jeg valgte det som utgangspunkt for programmet mitt:

var mongoose = krever ('mongoose'); mongoose.connect ( 'mongodb: // localhost / mongoose_basics');

Den første linjen med kode inkluderer Mongoose bibliotek. Deretter åpner jeg en forbindelse til en database som jeg har ringt mongoose_basics bruker koble funksjon.

De koble funksjonen aksepterer to andre valgfrie parametere. Den andre parameteren er et objekt av alternativer der du kan definere ting som brukernavn og passord, om nødvendig. Den tredje parameteren, som også kan være den andre parameteren hvis du ikke har noen alternativer, er tilbakeringingsfunksjonen etter å ha forsøkt å koble til. Tilbakeringingsfunksjonen kan brukes på to måter:

mongoose.connect (uri, alternativer, funksjon (feil) // Kontroller feil ved opprinnelig tilkobling. Det er ingen andre param til tilbakekallingen.); // eller bruke løfter mongoose.connect (uri, alternativer) .then (() => / ** klar til bruk. Løftet 'mongoose.connect ()' løser undefined. * /, Err => / ** håndter opprinnelig tilkoblingsfeil * /);

For å unngå en mulig introduksjon til JavaScript-løfter, vil jeg bruke den første måten. Nedenfor er en oppdatert index.js-fil:

var mongoose = krever ('mongoose'); mongoose.connect ('mongodb: // localhost / mongoose_basics', funksjon (err) hvis (err) kaste err; console.log ('Vellykket tilkoblet'););

Hvis det oppstår en feil ved tilkobling til databasen, blir unntaket kastet og all videre behandling stoppet. Når det ikke oppstår en feil, har jeg logget en suksessmelding til konsollen.

Mongoose er nå satt opp og koblet til en database som heter mongoose_basics. Min MongoDB-tilkobling bruker ikke brukernavn, passord eller tilpasset port. Hvis du trenger å angi disse alternativene eller andre alternativer under tilkobling, foreslår jeg at du gjennomgår Mongoose-dokumentasjonen når du kobler til. Dokumentasjonen gir detaljerte forklaringer på de mange tilgjengelige alternativene, samt hvordan du oppretter flere tilkoblinger, tilkoblingssamling, kopier, osv.

Med en vellykket forbindelse, la oss gå videre for å definere et Mongoose-skjema.

Definere et Mongoose-skjema

Under introduksjonen viste jeg en bruker objekt som inneholdt to egenskaper: fornavn og etternavn. I det følgende eksemplet har jeg oversatt dette dokumentet til et Mongoose-skjema:

var userSchema = mongoose.Schema (firstName: String, LastName: String);

Dette er et veldig grunnleggende skjema som bare inneholder to egenskaper uten attributter knyttet til det. La oss utvide på dette eksemplet ved å konvertere for- og etternavnseiendommene til å være barnobjekter av a Navn eiendom. De Navn eiendom vil omfatte både for- og etternavn. Jeg vil også legge til en opprettet eiendom som er av typen Dato.

var userSchema = mongoose.Schema (navn: firstName: String, LastName: String, opprettet: Dato);

Som du kan se, lar Mongoose meg lage meget fleksible skjemaer med mange forskjellige mulige kombinasjoner av hvordan jeg kan organisere dataene mine.

I dette neste eksempel skal jeg lage to nye skjemaer som vil demonstrere hvordan man lager et forhold til et annet skjema: forfatter og bok. De bok skjema vil inneholde en referanse til forfatter skjema.

var authorSchema = mongoose.Schema.Types.ObjectId, navn: firstName: String, lastName: String, biografi: String, twitter: String, facebook: String, linkedin: String, profilBillede: Buffer, opprettet: type: dato, standard: date.now);

Over er forfatter skjema som utvides på konseptene av bruker skjema som jeg opprettet i forrige eksempel. For å koble forfatteren og boka sammen, er den første egenskapen til forfatter skjemaet er en _id eiendom som er en Objekt skjema type. _id er den vanlige syntaksen for å skape en primærnøkkel i Mongoose og MongoDB. Så, som bruker skjema, jeg har definert a Navn eiendom som inneholder forfatterens for- og etternavn. 

Utvide på bruker skjema, den forfatter inneholder flere andre string skjema typer. Jeg har også lagt til en Buffer skjema type som kan holde forfatterens profilbilde. Den endelige eiendommen har den opprettede datoen til forfatteren; Du kan imidlertid merke at den er opprettet litt annerledes fordi den har definert en standardverdi av "nå". Når en forfatter er vedvarende til databasen, vil denne egenskapen bli satt til gjeldende dato / klokkeslett.

For å fullføre skjemaeksemplene la vi opprette en bok skjema som inneholder en referanse til forfatteren ved å bruke Objekt skjema type:

var bookSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, title: String, oppsummering: String, isbn: String, miniatyrbilde: Buffer, forfatter: type: mongoose.Schema.Types.ObjectId, ref: ' Forfatter ', rangeringer: [oppsummering: String, detalj: String, numberOfStars: Nummer, opprettet: type: Dato, standard: Date.now], opprettet: type: Dato, standard: Date.now );

De bok skjemaet inneholder flere egenskaper av typen string. Som nevnt ovenfor inneholder den en referanse til forfatter skjema. For ytterligere å demonstrere de kraftige skjemadefinisjonene, bok skjema inneholder også en Array av rangeringer. Hver vurdering består av a sammendrag, detalj, numberOfStars, og opprettet dato eiendom.

Mongoose gir deg fleksibiliteten til å lage skjemaer med referanser til andre skjemaer, eller som i eksempelet ovenfor med rangeringer eiendom, det lar deg lage en Array av barnegenskaper som kan være inneholdt i et beslektet skjema (som bok til forfatter) eller inline som i eksemplet ovenfor (med bok til en rangering Array).

Opprette og lagre Mongoose-modeller

Siden forfatter og bok skjemaer viser Mongooses skjema fleksibilitet, jeg skal fortsette å bruke disse skjemaene og utlede en Forfatter og Bok modell fra dem.

var Forfatter = mongoose.model ('Author', authorSchema); var Book = mongoose.model ('Book', bookSchema);

En Mongoose-modell, når den er lagret, oppretter et dokument i MongoDB med egenskapene som definert av skjemaet det er avledet fra.

For å demonstrere å skape og lagre et objekt, i dette neste eksempel skal jeg lage flere objekter: an Forfatter Modell og flere Bok Modeller. Når de er opprettet, vil disse objektene fortsette å MongoDB ved hjelp av lagre metode av modellen.

var jamieAuthor = ny Forfatter _id: new mongoose.Types.ObjectId (), navn: firstName: 'Jamie', etternavn: 'Munro', biografi: 'Jamie er forfatter av ASP.NET MVC 5 med Bootstrap og Knockout .js. ', twitter:' https://twitter.com/endyourif ', facebook:' https://www.facebook.com/End-Your-If-194251957252562/ '; jamieAuthor.save (funksjon (err) hvis (err) kaste err; console.log ('Forfatter vellykket.'); var mvcBook = ny bok _id: new mongoose.Types.ObjectId (), tittel: 'ASP. NET MVC 5 med Bootstrap og Knockout.js ', forfatter: jamieAuthor._id, rangeringer: [sammendrag:' Great read ']; mvcBook.save (funksjon (feil) hvis (feil) kaste err; console.log ('Bestill vellykket.');); Var knockoutBook = ny bok _id: new mongoose.Types.ObjectId (), tittel: 'Knockout.js: Building Dynamic Client-Side Web Applications', forfatter: jamieAuthor._id ; knockoutBook.save (funksjon (feil) hvis (feil) kaste err; console.log ('Bestill vellykket.';;);;

I eksemplet ovenfor har jeg sjamløst koblet en referanse til mine to siste bøker. Eksemplet starter ved å opprette og lagre en jamieObject som er opprettet fra enForfatter Modell. Inne i lagre funksjon av jamieObject, Hvis det oppstår en feil, vil programmet gi et unntak. Når lagringen er vellykket, inne i lagre funksjon, blir de to bokobjektene opprettet og lagret. Ligner på jamieObject, Hvis det oppstår en feil ved lagring, utføres en feil; ellers blir en suksessmelding sendt ut i konsollen.

For å opprette referansen til forfatteren, refererer bokobjektene både til forfatter skjemaet er _id primærnøkkel i forfatter eiendom av bok skjema.

Validerer data før lagring

Det er ganske vanlig for dataene som vil ende opp med å skape en modell som skal fylles ut av et skjema på en nettside. På grunn av dette er det en god idé å validere disse dataene før du lagrer modellen til MongoDB.

I dette neste eksempel har jeg oppdatert forrige forfatter-skjema for å legge til validering på følgende egenskaper: fornavn, twitter, facebook, og linkedin.

var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, navn: firstName: type: String, obligatorisk: true, lastName: String, biografi: String, twitter: type: String, validere : validator: funksjon (tekst) return text.indexOf ('https://twitter.com/') === 0;, melding: 'Twitter-håndtaket må starte med https://twitter.com/' , facebook: type: String, validere: validator: funksjon (tekst) return text.indexOf ('https://www.facebook.com/') === 0;, melding: 'Facebook må starte med https://www.facebook.com/ ', linkedin: type: String, validere: validator: funksjon (tekst) return text.indexOf (' https://www.linkedin.com/ ') === 0;, melding: 'LinkedIn må starte med https://www.linkedin.com/', profilPicture: Buffer, opprettet: type: Dato, standard: Date.now);

De fornavn Eiendommen har blitt tilskrevet med nødvendig eiendom. Nå når jeg ringer til lagre funksjon, vil Mongoose returnere en feil med en melding som indikerer fornavn eiendom er nødvendig. Jeg valgte ikke å lage etternavn eiendom som kreves dersom Cher eller Madonna skulle være forfattere i databasen min.

De twitter, facebook, og linkedin Egenskaper alle har veldig lignende tilpassede validatorer som er brukt på dem. De sikrer hverandre at verdiene starter med det respektive domenenavnetes sosiale nettverk. Disse feltene er ikke påkrevet, så validatoren vil bare bli brukt når data leveres for den aktuelle egenskapen.

Søker etter og oppdaterer data

En introduksjon til Mongoose ville ikke være komplett uten et eksempel på å søke etter en plate og oppdatering av en eller flere egenskaper på objektet.

Mongoose gir flere forskjellige funksjoner for å finne data for en bestemt modell. Funksjonene er finne, Finn én, og findById.

De finne og Finn én Fungerer begge aksepterer et objekt som inngang som tillater komplekse søk, mens findById aksepterer bare en enkelt verdi med tilbakeringingsfunksjon (et eksempel vil følge snart). I dette neste eksemplet skal jeg demonstrere hvordan man finner alle bøker som inneholder strengen "mvc" i tittelen sin.

Book.find (title: / mvc / i) .exec (funksjon (feil, bøker) hvis (feil) kaste err; console.log (bøker););

Inne i finne funksjon, jeg søker etter saken ufølsom streng "mvc" på tittel eiendom. Dette oppnås ved å bruke samme syntaks for å søke en streng med JavaScript.

Funnfunksjonsanropet blir også koblet til andre spørringsmetoder, for eksempel hvor, og, eller, grense, sortere, noen, etc.

La oss utvide på forrige eksempel for å begrense resultatene til de fem første bøkene og sortere på den opprinnelige datoen som synkende. Dette kommer tilbake til de fem siste bøkene som inneholder "mvc" i tittelen.

Book.find (title: / mvc / i). Sort ('- opprettet') .limit (5) .exec (funksjon (feil, bøker) hvis (feil) kaste err; console.log );

Etter påføring av finne funksjonen, er rekkefølgen til de andre funksjonene ikke viktig fordi alle de kjedede funksjonene er samlet sammen i en enkelt spørring og ikke henrettet til exec funksjon kalles.

Som jeg tidligere nevnte, findById utføres litt annerledes. Den kjøres umiddelbart og aksepterer en tilbakeringingsfunksjon, i stedet for å tillate en kjede av funksjoner. I dette neste eksempel spør jeg en bestemt forfatter av deres _id.

Forfatter.findById ('59b31406beefa1082819e72f', funksjon (feil, forfatter) hvis (feil) kaste err; console.log (forfatter););

De _id i ditt tilfelle kan være litt annerledes. Jeg kopierte dette _id fra en tidligere console.log når du finner en liste over bøker med "mvc" i tittelen sin.

Når et objekt er returnert, kan du endre noen av egenskapene for å oppdatere det. Når du har gjort de nødvendige endringene, ringer du til lagre metode, akkurat som når du lager objektet. I dette neste eksempel vil jeg utvide findbyId eksempel og oppdatere linkedin eiendom på forfatteren.

Forfatter.findById ('59b31406beefa1082819e72f', funksjon (feil, forfatter) hvis (feil) kaste err; author.linkedin = 'https://www.linkedin.com/in/jamie-munro-8064ba1a/'; author.save (funksjon (feil) hvis (feil) kaste err; console.log ('Forfatter oppdatert vellykket');););

Etter at forfatteren er hentet, linkedin eiendommen er satt og lagre funksjon kalles. Mongoose er i stand til å oppdage at linkedin Eiendommen ble endret, og den vil sende en oppdateringserklæring til MongoDB på bare de egenskapene som er endret. Hvis det oppstod en feil under lagring, vil et unntak kastes og stoppe programmet. Når det lykkes, logges en suksessmelding til konsollen.

Mongoose tilbyr også to tilleggsfunksjoner som gjør det mulig å finne et objekt og lagre det i ett enkelt trinn med de passende navngitte funksjonene: findByIdAndUpdate og findOneAndUpdate. La oss oppdatere forrige eksempel for å bruke findByIdAndUpdate.

Forfatter.findByIdAndUpdate ('59b31406beefa1082819e72f', linkedin: 'https://www.linkedin.com/in/jamie-munro-8064ba1a/', funksjon (feil, forfatter) hvis (feil) kaste err; console.log (forfatter););

I forrige eksempel leveres egenskapene som skal oppdateres som et objekt til den andre parameteren til findByIdAndUpdate funksjon. Tilbakeringingsfunksjonen er nå den tredje parameteren. Når oppdateringen er vellykket, vil forfatter objekt returnert inneholder den oppdaterte informasjonen. Dette er logget på konsollen for å se egenskapene til den oppdaterte forfatteren.

Endelig prøvekode

I hele denne artikkelen ga jeg ut små kodestykker som identifiserte en veldig spesifikk handling, for eksempel å lage et skjema, lage en modell osv. La oss sette sammen alt i et komplett eksempel. 

For det første har jeg opprettet to ekstra filer: author.js og book.js. Disse filene inneholder sine respektive skjemadefinisjoner og modellopprettelsen. Den endelige linjen med kode gjør modellen tilgjengelig for bruk i index.js fil.

La oss starte med author.js-filen:

var mongoose = krever ('mongoose'); var authorSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, navn: firstName: type: String, obligatorisk: true, lastName: String, biografi: String, twitter: type: String, validere : validator: funksjon (tekst) return text.indexOf ('https://twitter.com/') === 0;, melding: 'Twitter-håndtaket må starte med https://twitter.com/' , facebook: type: String, validere: validator: funksjon (tekst) return text.indexOf ('https://www.facebook.com/') === 0;, melding: 'Facebook må starte med https://www.facebook.com/ ', linkedin: type: String, validere: validator: funksjon (tekst) return text.indexOf (' https://www.linkedin.com/ ') === 0;, melding: 'LinkedIn må starte med https://www.linkedin.com/', profilPicture: Buffer, opprettet: type: Dato, standard: Date.now); var Forfatter = mongoose.model ('Author', authorSchema); module.exports = Forfatter;

Neste kommer book.js fil:

var mongoose = krever ('mongoose'); var bookSchema = mongoose.Schema (_id: mongoose.Schema.Types.ObjectId, title: String, oppsummering: String, isbn: String, miniatyrbilde: Buffer, forfatter: type: mongoose.Schema.Types.ObjectId, ref: ' Forfatter ', rangeringer: [oppsummering: String, detalj: String, numberOfStars: Nummer, opprettet: type: Dato, standard: Date.now], opprettet: type: Dato, standard: Date.now ); var Book = mongoose.model ('Book', bookSchema); module.exports = Book;

Og til slutt, den oppdaterte index.js fil:

var mongoose = krever ('mongoose'); var Forfatter = krever ('./ forfatter'); var Book = krever ('./ bok'); mongoose.connect ('mongodb: // localhost / mongoose_basics', funksjon (err) hvis (err) kaste err; console.log ('Vellykket tilkoblet'); var jamieAuthor = ny Forfatter (_id: new mongoose.Types. ObjectId (), navn: firstName: 'Jamie', etternavn: 'Munro', biografi: 'Jamie er forfatter av ASP.NET MVC 5 med Bootstrap og Knockout.js.', Twitter: 'https: // twitter .com / endyourif ', facebook:' https://www.facebook.com/End-Your-If-194251957252562/ '); jamieAuthor.save (funksjon (err) hvis (feil) kaste err; console.log ('Forfatter vellykket lagret.'); Var mvcBook = Ny bok (_id: new mongoose.Types.ObjectId (), tittel: 'ASP.NET MVC 5 med Bootstrap og Knockout.js', forfatter: jamieAuthor._id, rangeringer : [summary: 'Great read']); mvcBook.save (funksjon (feil) hvis (feil) kaste err; console.log ('Bestill vellykket.';;); var knockoutBook = ny bok (_id: new mongoose.Types.ObjectId (), tittel: 'Knockout.js: Building Dynamic Client-Side Web Applications', forfatter: jamieAuthor._id); knockoutBook.save (funct ion (err) hvis (feil) kaste feil; console.log ('Bestill vellykket.'); ); ); );

I eksempelet ovenfor er alle de mongoose handlingene inneholdt i koble funksjon. De forfatter og bok filer er inkludert i krever funksjon etter å ha medtatt Mongoose bibliotek.

Med MongoDB kjører, kan du nå kjøre hele programmet Node.js med følgende kommando:

node index.js

Etter at jeg lagret noen data i databasen, oppdaterte jeg index.js filen med funnfunksjonene som følger:

var mongoose = krever ('mongoose'); var Forfatter = krever ('./ forfatter'); var Book = krever ('./ bok'); mongoose.connect ('mongodb: // localhost / mongoose_basics', funksjon (err) hvis (err) kaste err; console.log ('Vellykket tilkoblet'); Book.find (title: / mvc / i). sortere ('opprettet') .limit (5) .exec (funksjon (feil, bøker) hvis (feil) kaste err; console.log (bøker);); Author.findById ('59b31406beefa1082819e72f', funksjon , forfatter) hvis (err) kaste err; author.linkedin = 'https://www.linkedin.com/in/jamie-munro-8064ba1a/'; author.save (funksjon (feil) hvis (feil) kaste err; console.log ('Forfatter oppdatert vellykket'););); Author.findByIdAndUpdate ('59b31406beefa1082819e72f', linkedin: 'https://www.linkedin.com/in/jamie-munro-8064ba1a/' , funksjon (feil, forfatter) hvis (feil) kaste err; console.log (author);););

Igjen kan du kjøre programmet med kommandoen: node index.js.

Sammendrag

Etter å ha lest denne artikkelen, bør du kunne lage ekstremt fleksible Mongoose-skjemaer og -modeller, bruke enkel eller kompleks validering, opprette og oppdatere dokumenter, og til slutt søke etter dokumentene som ble opprettet.

Forhåpentligvis føler du deg komfortabel med å bruke Mongoose. Hvis du ønsker å lære mer, vil jeg foreslå å gjennomgå Mongoose Guides som dykker inn i mer avanserte emner som befolkning, mellomvare, løfter osv..

Glad jakt (dårlig Mongoose dyr referanse)!