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.
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:
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):
- Lataa sopiva MongoDB versio käyttöjärjestelmästä alkaen MongoDB Verkkosivuilla ja seuraa niiden asennus ohjeet
- Luo ilmainen sandbox-tietokannan tilaus mLab
- 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.
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):
-
_id
kenttä on auto-generated by Mongo ja on ensisijaisen avaimen kokoelma. Sen arvo on asiakirjan yksilöllinen tunniste. -
__v
on versionKey kiinteistön asettaa kunkin asiakirjan, kun ensin luotu Mongoose. Sen arvo sisältää asiakirjan sisäisen tarkistuksen.
email
kentän arvo palautetaan., Huomaa, että se on alempi-cased, koska määritimme lowercase:true
attribuutti skeema.
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:
- tapahtuman Tyyppi (’init’, ’tarkista’, ’save’, ’poista’)
- soittopyyntö, joka on toteutettu tällä viitataan malli esimerkiksi
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:
- Löytää kaikki käyttäjät
- Ohita ensimmäinen 100 kirjaa
- Raja-tulokset 10 kirjaa
- Lajittele tulokset firstName-kentän
- Valitse etunimi
- 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”.