sql >> Databáze >  >> NoSQL >> MongoDB

Začínáme s MongoDB a Mongoose

V tomto příspěvku vám ukážeme, jak použít Mongoose pro vaše nasazení MongoDB, abyste vytvořili přímočařejší řešení založené na schématu pro modelování dat vaší aplikace.

P>

Co je Mongoose?

Mongoose je „elegantní objektové modelování MongoDB pro Node.js “. Pokud jste MongoDB dříve používali a vyzkoušeli jste základní databázové operace, možná jste si všimli, že MongoDB je „bez schématu“. Pokud hledáte implementaci strukturovanější databáze a chcete využít sílu MongoDB, Mongoose je jedním z ODM (O bjekt D ata M aplikační) řešení.

Chcete-li to rychle demonstrovat, spusťte příkaz vložení do kolekce s názvem users takto:

db.users.insert({ name :'Arvind', gender :'male'});

A hned poté můžete spustit:

db.users.insert({ jméno :'Arvind', pohlaví :'muž', heslo:'!@#$'});

a MongoDB si nikdy nebude stěžovat na odchylky v počtu sloupců (párů klíč-hodnota). To je velmi flexibilní. Ale pokud chcete, aby vaše data byla lépe organizovaná a strukturovaná, museli byste to zachovat v kódu serveru, zapisovat ověřování a ujistit se, že v kolekci není uloženo nic nepodstatného. To je místo, kde Mongoose usnadňuje život.

„Mongoose poskytuje přímočaré řešení založené na schématech pro modelování dat vaší aplikace a zahrnuje vestavěné typové obsazení, ověřování, vytváření dotazů, háčky obchodní logiky a další , po vybalení.“

Nainstalujte Node.js a MongoDB

Abyste mohli Mongoose používat, potřebujeme mít nainstalovaný Node.js. Informace najdete zde.

Začněte s vývojem

Nejprve vytvořte malé hřiště, kde se budeme moci bavit. Vytvořte novou složku s názvem myMongooseApp a zde otevřete terminál/výzvu a spusťte:

npm init

To nám pomůže při inicializaci nového projektu uzlu. Doplňte jej podle potřeby. Dále nainstalujeme Mongoose jako závislost na našem projektu. Spustit:

npm install mongoose --save-dev

Potom spusťte službu MongoDB spuštěním:

mongod

Dále vytvořte nový soubor s názvem index.js v kořenovém adresáři a poté jej otevřete ve svém oblíbeném editoru. Přidejte níže uvedený kód:

var mongoose =require('mongoose');mongoose.connect('mongodb://localhost/myTestDB');var db =mongoose.connection;db.on('error', function (err) {console. log('connection error', err);});db.once('open', function () {console.log('connected.');});

Zde vyžadujeme, aby se balíček Mongoose připojil k databázi a inicializoval připojení. Název naší databáze je myTestDB.

Poté spusťte:

node index.js

Nyní byste měli vidět připojenou zprávu. Můžete také použít uzlový balíček s názvem nodemon pro automatické restartování uzlového serveru při změnách.

Nyní je naše karanténa připravena ke hře!

Schémata Mongoose

Schémata jsou jako kostry, holé kosti toho, jak bude vaše shromažďování dat vypadat. Pokud máte co do činění s kolekcí uživatelů, vaše schéma bude vypadat nějak takto:

Jméno - StringAge - NumberGender - StringDate of Birth - Date

Pokud máte co do činění s kolekcí produktů, vaše schéma bude vypadat nějak takto:

SKU – StringName – StringPrice – NumberInStock – BooleanQuantity – Number

Můžete vidět posun. Když jsou naše data střežena pomocí schématu, jako je toto, možnost ukládání odpadních dat se drasticky snižuje.

Teď, když už rozumíme schématům, zkusme vytvořit uživatelské schéma pomocí Mongoose. Vraťte se na index.js a přidejte níže uvedený kód:

var Schema =mongoose.Schema;var userSchema =new Schema({jméno :Řetězec, věk :Číslo, DOB :Datum, jeAlive :Boolean});

Zde naleznete základní pole související s uživateli a jejich typy schémat.

Dále ze schématu vytvoříme model. Přidat:

var User =mongoose.model('User', userSchema);

To je vše, náš uživatelský model je připraven! Toto použijeme jako naše základní schéma pro vkládání uživatelů do databáze. Tímto způsobem víme, že každý dokument v kolekci uživatelů bude mít pole uvedená ve schématu. Vytvoříme novou uživatelskou instanci a uložíme ji do DB. Přidat:

var arvind =new User({jméno :'Arvind',věk :99,DOB :'01/01/1915',isAlive :true});arvind.save(funkce (chyba, data) {if (chyba ) console.log(err);else console.log('Saved :', data );});

Měli byste vidět něco takového:

Uloženo :{ __v:0,jméno:'Arvind',věk:99,DOB:Pá 01.01.1915 00:00:00 GMT+0530 (IST),isAlive:true,_id:536a4866dba434390d728216 

Žádné problémy, žádné problémy. Jednoduché a snadné rozhraní API pro interakci s Modely.

Řekněme, že chceme, aby každý model měl metodu s názvem isYounger. Tato metoda vrátí hodnotu true, pokud je věk nižší než 50 let, a hodnotu false, pokud je vyšší. Můžeme to udělat dotazem na aktuálního uživatele v databázi, poté zkontrolováním podmíněnosti a vrácením true nebo false.

Co když ale chceme implementovat tuto metodu do všech modelů uživatelského schématu? V Mongoose to děláme takto:

var mongoose =require('mongoose');mongoose.connect('mongodb://localhost/myTestDB');var db =mongoose.connection;db.on('error', function (err) {console. log('connection error', err);});db.once('open', function () {console.log('connected.');});var Schema =mongoose.Schema;var userSchema =new Schema ({jméno :String,věk :Číslo,DOB :Datum,jeŽivý :Boolean});userSchema.methods.isYounger =function () {return this.model('User').věk <50 ? true :false;}var User =mongoose.model('User', userSchema);var arvind =new User({name :'Arvind',age :99,DOB :'01/01/1915',isAlive :true} );arvind.save(funkce (chyba, data) {if (chyba) console.log(err);else console.log('Uloženo ', data );});console.log('isYounger :',arvind. isYounger());

Na řádek 21 přidáme definici metody a výsledek na řádku 39 bude nepravdivý. Jedná se o jednoduchý a praktický způsob, jak do schématu přidat metody, aby bylo více objektově orientované.

V případě, že máte pole pro heslo, můžete přidat metodu, jako je encryptPassword(), pro šifrování hesla a ComparePassword(), pro porovnání hesel při přihlášení se samotným userSchema. Více o ověřování hesla si můžete přečíst zde.

Out-of-the-box Mongoose také nabízí několik možností při vytváření schématu. Pokud se například podíváte na níže uvedenou deklaraci schématu, předáváme možnost strict:false:

var userSchema =new Schema({jméno :Řetězec, věk :Číslo, DOB :Datum, jeAlive :Boolean}, {strict :false});

Přísná možnost má ve výchozím nastavení hodnotu true a neumožňuje uložení párů klíč–hodnota „neschéma“. Například toto bude uloženo:

var arvind =nový uživatel({jméno :'Arvind',věk :99, DOB :'01/01/1915',isAlive :true});

Vzhledem k tomu:

var arvind =new User({name :'Arvind',age :99,DOB :'01/01/1915',isAlive :true,bucketList :[{...}, {...}, { ...} ]});

Vše výše uvedené bude uloženo bez pole bucketList, protože nebylo deklarováno jako součást schématu. Žádný klient, který využívá vaše služby, tedy nebude moci uložit neplatná data do vašich sbírek.

Další skvělou možností je kolekce. Pokud nechcete, aby se název vašeho modelu shodoval s názvem kolekce, můžete název předat jako možnost:

var userSchema =new Schema({jméno :Řetězec, věk :Číslo, DOB :Datum, jeAlive :Boolean}, {collection :'appusers'});

Seznam dalších možností naleznete zde.

S Mongoose můžete také přidat události do svých schémat, jako je předběžné uložení nebo uložení po uložení, kde můžete provádět ověřování, zpracovávat data nebo spouštět další dotazy v příslušných událostech. Tyto metody se nazývají Middleware.

Jednoduchým příkladem může být paralelní middleware jako:

var userSchema =new Schema({jméno :Řetězec,věk :Číslo,DOB :Date,isAlive :Boolean})schema.pre('save', true, function (další, hotovo) {// volání další začíná další middleware v parallelnext();doAsync(done);});

Další informace o middlewaru si můžete přečíst zde. V našem dalším příspěvku si povíme více o používání Yeoman k automatickému generování lešení pro vaše projekty MongoDB.

Děkuji za přečtení. Napište komentář.
@arvindr21


  1. MongoDB C# Driver - Ignorovat pole na vazbě

  2. Jak porovnat 2 kolekce mongodb?

  3. Synchronizace stylu CouchDB a řešení konfliktů na Postgres s Hasura

  4. Jak mohu používat Tornado a Redis asynchronně?