Nick Karnik

Mungo on Objektin Tietojen Mallinnus (ODM) kirjasto MongoDB ja Solmu.js. Se hallinnoi tietojen välisiä suhteita, tarjoaa skeeman validoinnin, ja sitä käytetään kääntämään koodissa olevien objektien ja näiden objektien edustuksen välillä Mongodbissa.

Esine Kartoitus Solmu ja MongoDB onnistunut kautta Mungo

MongoDB on skeema-vähemmän NoSQL asiakirja tietokantaan., Se tarkoittaa, että voit tallentaa JSON asiakirjoja siihen, ja näiden asiakirjojen rakenne voi vaihdella, koska sitä ei panna täytäntöön kuten SQL tietokantoja. Tämä on yksi NoSQL: n käytön eduista, koska se nopeuttaa sovellusten kehittämistä ja vähentää käyttöönottojen monimutkaisuutta.

Alla on esimerkki siitä, miten tiedot on tallennettu Mongo vs. SQL-Tietokanta:

NoSQL Asiakirjat vs., Relaatio Taulukot SQL

Terminologia

Kokoelmat

’Kokoelmat’ Mongo vastaavat taulukot relaatiotietokantojen. Heillä voi olla useita JSON-asiakirjoja.

Asiakirjat

”Asiakirjat” vastaavat tietueet tai rivit tiedot SQL. Vaikka SQL-rivi voi viitata tietoihin muissa taulukoissa, Mongo-dokumentit yleensä yhdistävät sen dokumentissa.

kentät

”kentät” tai attribuutit muistuttavat SQL-taulukon sarakkeita.

skeema

kun taas Mongo on skeematon, SQL määrittelee skeeman taulukon määritelmän kautta., Mongoosinen ”skeema” on asiakirjatietorakenne (tai asiakirjan muoto), joka pannaan täytäntöön sovelluskerroksen kautta.

Mallit

’Mallit’ ovat korkeamman asteen rakennuttajat, että ottaa malli ja luoda esimerkiksi asiakirja vastaa kirjaa relaatiotietokanta.

aloitus

Mongo Asennus

Ennen kuin aloitamme, katsotaanpa setup Mongo., Voit valita yhden seuraavista vaihtoehdoista (käytämme vaihtoehto #1 tämä artikkeli):

  1. Lataa sopiva MongoDB versio käyttöjärjestelmästä alkaen MongoDB Verkkosivuilla ja seuraa niiden asennus ohjeet
  2. Luo ilmainen sandbox-tietokannan tilaus mLab
  3. Asentaa Mongo käyttäen Docker jos haluat käyttää satamatyöläinen

katsotaanpa navigoida läpi joitakin perusasioita Mungo toteuttamalla malli, joka kuvaa tietoja yksinkertaistettu osoite kirja.

I am using Visual Studio Code, Node 8.9, and NPM 5.6., Käynnistä suosikki IDE, luo tyhjä projekti, ja aloitetaan! Käytämme rajoitettua ES6-syntaksia solmussa, joten emme määritä Babelia.

NPM Asentaa

mennään projektin kansioon ja alustaa projektimme

npm init -y

katsotaanpa asentaa Mungo ja validointi kirjasto komennolla:

npm install mongoose validator

edellä asentaa komento asentaa uusimman version kirjastot. Mongoose syntaksi tässä artikkelissa on erityinen Mongoose v5 ja sen jälkeen.,

tietokantayhteys

Luo tiedosto ./src/database.js hankkeessa root.

seuraavaksi lisätään yksinkertainen luokka, jossa on tietokanta yhdistävä menetelmä.

yhteysmerkkijonosi vaihtelee asennuksesi mukaan.

require(‘mongoose’) call above palauttaa Singleton-objektin. Se tarkoittaa, että kun soitat ensimmäistä kertaa require(‘mongoose’), se luo mongoosiluokan instanssin ja palauttaa sen., Myöhemmissä puheluissa, se palauttaa saman oikeusasteen, joka luotiin ja palasi sinulle ensimmäistä kertaa, koska miten moduuli tuonti/vienti toimii ES6.

– Moduuli import/vaatia työ-flow

Samalla tavalla, että me olemme kääntyneet Tietokantaan luokan singleton palauttamalla luokan ilmentymä module.exports toteamus, koska meidän tarvitsee vain yhden yhteyden tietokantaan.,

ES6 tekee siitä erittäin helppo luoda singleton (kertaalleen) malli, koska miten module loader toimii tallentamalla vastaus aiemmin tuodun tiedoston.

Mongoose Schema vs. Model

Mongoose-malli on Mongoose-skeeman kääre. Mangustin skeema määrittelee dokumentin rakenteen, oletusarvot, validaattorit jne., kun taas Mangustimalli tarjoaa käyttöliittymän tietokantaan luoda, querying, päivittäminen, poistaminen kirjaa, jne.

Luominen Mungo malli koostuu pääasiassa kolmesta osasta:

1., Vertailemalla Mungo

let mongoose = require('mongoose')

Tämä viite on sama kuin yksi, joka palautettiin, kun me liitetty tietokantaan, mikä tarkoittaa, skeema ja malli määritelmiä ei tarvitse erikseen muodostaa yhteyden tietokantaan.

2. Määritellään Rakenteen

skeema määrittelee asiakirjan ominaisuudet esineen läpi, missä avain nimi vastaa kiinteistön nimi kokoelma.,

let emailSchema = new mongoose.Schema({ email: String})

Tässä määritellä ominaisuus nimeltä sähköpostitse skeema tyyppi String, joka maps sisäinen validator, joka laukeaa, kun malli on tallennettu tietokantaan. Se epäonnistuu, jos arvon tietotyyppi ei ole merkkijonotyyppi.

seuraavat Schema Tyypit ovat sallittuja:

  • Joukko
  • Boolean
  • Buffer
  • Päivämäärä
  • Sekoitetaan (yleinen / joustava tiedot tyyppi)
  • Useita
  • ObjectId
  • String

Sekoitetaan ja ObjectId on määritetty kohdassa require(‘mongoose’).Schema.Types.

3., Vientiä Malli

– Meidän täytyy kutsua malli rakentaja on esimerkiksi Mungo ja siirtää sen kokoelman nimi ja viittaus skeema määritelmä.

module.exports = mongoose.model('Email', emailSchema)

katsotaanpa yhdistää edellä koodi ./src/models/email.js määrittää sisällön perus sähköposti malli:

skeema määritelmä pitäisi olla yksinkertainen, mutta sen monimutkaisuus on yleensä perustuu sovelluksen vaatimuksiin. Schemas voidaan käyttää uudelleen ja ne voivat sisältää useita lapsi-schemas liian. Yllä olevassa esimerkissä sähköpostiomaisuuden arvo on yksinkertainen arvotyyppi., Se voi kuitenkin olla myös objektityyppi, jossa on lisäominaisuuksia.

Voimme luoda esimerkiksi malli, jota edellä on määritelty, ja kansoittavat sen käyttämällä seuraavaa syntaksia:

let EmailModel = require('./email')let msg = new EmailModel({ email: '[email protected]'})

– Anna on parantaa Sähköposti skeema tehdä sähköpostitse omaisuutta ainutlaatuinen, pakollinen kenttä ja muuntaa arvo pieniksi ennen sen tallentamista. Voimme myös lisätä validointitoiminnon, joka varmistaa, että arvo on voimassa oleva sähköpostiosoite. Viittaamme ja käytämme aiemmin asennettua validator-kirjastoa.,

peruskäyttö

Mungo on joustava API ja tarjoaa monia tapoja suorittaa tehtävän. Emme keskittyä vaihtelut, koska se on pois soveltamisala tämän artikkelin, mutta muista, että useimmat toiminnot voidaan tehdä useammalla kuin yhdellä tavalla joko syntaktisesti tai kautta sovelluksen arkkitehtuuri.,

Uusi Ennätys

katsotaanpa luoda esimerkiksi sähköposti malli ja tallentaa sen tietokantaan:

tuloksena on dokumentti, joka palautetaan onnistuneen säästä:

{ _id: 5a78fe3e2f44ba8f85a2409a, email: '[email protected]', __v: 0 }

seuraavat kentät ovat palanneet (sisäiset kentät on merkitty alaviivalla):

  1. _id kenttä on auto-generated by Mongo ja on ensisijaisen avaimen kokoelma. Sen arvo on asiakirjan yksilöllinen tunniste.
  2. emailkentän arvo palautetaan., Huomaa, että se on alempi-cased, koska määritimme lowercase:true attribuutti skeema.

  3. __v on versionKey kiinteistön asettaa kunkin asiakirjan, kun ensin luotu Mongoose. Sen arvo sisältää asiakirjan sisäisen tarkistuksen.

Jos yrität toistaa yllä olevaa tallennusoperaatiota, saat virheen, koska olemme määritelleet, että sähköpostikentän pitäisi olla ainutlaatuinen.

nouda ennätys

yritetään hakea tallennettua levyä tietokantaan aiemmin., Malliluokka altistaa useita staattisia ja instanssimenetelmiä tietokannan toimintojen suorittamiseen. Nyt yritämme löytää tallennetta, jonka olemme luoneet aiemmin find-menetelmällä ja siirtää sähköpostin hakusanaksi.

EmailModel .find({ email: '[email protected]' // search query }) .then(doc => { console.log(doc) }) .catch(err => { console.error(err) })

asiakirja palautetaan tulee olla samanlainen kuin mitä oli näkyvissä, kun me loi ennätys:

{ _id: 5a78fe3e2f44ba8f85a2409a, email: '[email protected]', __v: 0 }

Päivitys Ennätys

katsotaanpa muuttaa ennätys ennen muuttamalla sähköpostiosoitteen ja lisäämällä toisen kentän, kaikki yhdellä kertaa., Suorituskyvyn vuoksi, Mungo ei palauta päivitetty asiakirja, joten meidän täytyy siirtää ylimääräinen parametri pyytää sitä:

asiakirjan palasi sisältää päivitetty sähköposti:

{ _id: 5a78fe3e2f44ba8f85a2409a, email: '[email protected]', __v: 0 }

Poista Tietue

käytämme findOneAndRemove soita jos haluat poistaa tietueen., Se palauttaa alkuperäisen asiakirjan, joka on poistettu:

Auttajia

Olemme tarkastelleet joitakin perustoiminnot yllä tunnetaan LIKA (Luoda, Lukea, Päivittää, Poistaa) toimintaa, mutta Mungo tarjoaa myös mahdollisuuden määrittää useita erilaisia auttaja menetelmiä ja ominaisuuksia. Niiden avulla voidaan edelleen yksinkertaistaa tietojen kanssa työskentelyä.

luodaan käyttäjä kaavaan ./src/models/user.js aloillafirstName ja lastName:

Virtuaalinen Omaisuus

virtuaalinen omaisuus ei ole jatkui tietokantaan., Voimme lisätä sen skeemaamme auttajana saada ja asettaa arvoja.

– Anna on luoda virtuaalinen ominaisuus nimeltä fullName, joka voidaan asettaa arvot firstName ja lastName ja hakea niitä yhteenlaskettu arvo, kun lukea:

Callbacks for get ja set on käytettävä toiminto, avainsanan, koska meidän täytyy käyttää mallin kautta this avainsana. Fat arrow-funktioiden käyttäminen muuttaa sen, mihin this viittaa.,

Nyt, voimme asettaa firstName ja lastName määrittämällä arvo fullName:

yllä Oleva koodi tulostaa seuraavasti:

{ _id: 5a7a4248550ebb9fafd898cf, firstName: 'Thomas', lastName: 'Anderson' } Thomas Anderson

Esimerkiksi Menetelmiä

Me voimme itse luoda mukautettuja auttaja menetelmiä, skeema ja käyttää niitä kautta malli esimerkiksi. Näillä menetelmillä on pääsy malliesineeseen ja niitä voidaan käyttää melko luovasti. Esimerkiksi, voimme luoda menetelmä löytää kaikki ihmiset, joilla on sama etunimi kuin nykyinen esiintymä.,

tässä esimerkissä luodaan funktio palauttaa nimikirjaimet nykyisen käyttäjän. Katsotaanpa lisätä mukautetun helper menetelmää, jota kutsutaan getInitials skeema:

userSchema.methods.getInitials = function() { return this.firstName + this.lastName}

Tämä menetelmä on saatavilla malli, esimerkiksi:

Staattiset Metodit

Samanlainen esimerkiksi menetelmiä, voimme luoda staattisia menetelmiä skeema., Katsotaanpa luoda menetelmä palauttaa kaikki käyttäjät tietokannasta:

Soittaa getUsers Malli-luokka palauttaa kaikki käyttäjät tietokannasta:

UserModel.getUsers() .then(docs => { console.log(docs) }) .catch(err => { console.error(err) })

Lisäämällä esimerkiksi ja staattisia menetelmiä on mukava lähestymistapa toteuttaa rajapinnan tietokantaan vuorovaikutusta kokoelmat ja kirjaa.

Middleware

Middleware ovat putkiston tietyissä vaiheissa toimivia toimintoja., Mongoose tukee middleware seuraavat toiminnot:

  • Yhteenlaskettu
  • Asiakirja
  • Malli
  • Kysely

esimerkiksi, mallit ovat pre ja post toiminnot, jotka vievät kaksi parametrit:

  1. tapahtuman Tyyppi (’init’, ’tarkista’, ’save’, ’poista’)
  2. soittopyyntö, joka on toteutettu tällä viitataan malli esimerkiksi
Esimerkki Middleware (a.k.a., pre-ja post koukut)

yritetään esimerkiksi lisäämällä kaksi kenttää kutsutaan createdAt ja updatedAt meidän skeema:

Kun model.save() kutsutaan, siellä on pre(‘save’, …) ja post(‘save’, …) tapahtuma, joka laukeaa. Toista parametria varten voit siirtää funktion, jota kutsutaan tapahtuman lauetessa. Nämä toiminnot vievät parametrin seuraavaan funktioon middleware-ketjussa.,

katsotaanpa lisätä pre-save koukku ja asettaa arvot createdAt ja updatedAt:

Let ’ s luoda ja tallentaa malli:

Sinun pitäisi nähdä arvot createdAt ja updatedAt kun ennätys, joka on luotu on painettu.

Plugins

Oletetaan, että haluamme seurata, kun tietue on luotu ja päivitetty jokainen kokoelma meidän tietokantaan. Edellä mainitun prosessin toistamisen sijaan voimme luoda liitännäisen ja soveltaa sitä jokaiseen skeemaan.,

luodaan tiedosto ./src/model/plugins/timestamp.js ja jäljitellä edellä mainitut toiminnot kuin uudelleenkäytettävä moduuli:

Voit käyttää tätä laajennusta, yksinkertaisesti siirtää sen rakenteita, että olisi annettava tämä toiminnallisuus:

Query Rakennus

Mungo on hyvin rikas API, joka käsittelee monia monimutkaisia toimintoja tukevat MongoDB. Harkitse kysely, jossa voimme vähitellen rakentaa kyselyn komponentteja.,

tässä esimerkissä aiomme:

  1. Löytää kaikki käyttäjät
  2. Ohita ensimmäinen 100 kirjaa
  3. Raja-tulokset 10 kirjaa
  4. Lajittele tulokset firstName-kentän
  5. Valitse etunimi
  6. Suorittaa, että kysely

Sulkeminen

Olemme hädin tuskin raapaisseet pintaa tutkia joitakin ominaisuuksia Mongoose. Se on rikas kirjasto täynnä hyödyllisiä ja tehokkaita ominaisuuksia, jotka tekevät siitä ilo työskennellä tiedot mallit sovellustasolla.,

samalla kun voit olla vuorovaikutuksessa Mongon kanssa suoraan Mongo Driver-ohjaimella, Mongoose yksinkertaistaa tätä vuorovaikutusta antamalla sinulle mahdollisuuden mallintaa tietojen välisiä suhteita ja validoida ne helposti.

hauska fakta: Mangustin on luonut Valeri Karpov, joka on uskomattoman lahjakas insinööri! Hän keksi termin ”MEAN Stack”.

jos tästä artikkelista oli apua,??? Seuraa minua Twitterissä.

pidät ehkä myös minun työpaja youtubessa: Miten Rakentaa REST API Node | Ilmaista | Mongo