Otevřít webinář „Základy MongoDB“

Přátelé, další spuštění kurzu "Databáze" proběhne zítra, a tak jsme uspořádali tradiční otevřenou lekci, jejíž záznam můžete zhlédnout zde. Tentokrát jsme hovořili o populární databázi MongoDB: prostudovali jsme některé jemnosti, podívali se na základy provozu, schopností a architektury. Dotkli jsme se také některých uživatelských případů.

Otevřít webinář „Základy MongoDB“

Webinář se konal Ivan Belt, vedoucí vývoje serverů ve společnosti Citymobil.

Vlastnosti MongoDB

MongoDB je open source dokumentově orientovaný DBMS, který nevyžaduje popis schématu tabulky. Je klasifikován jako NoSQL a používá BSON (binární JSON). Škálovatelný ihned po vybalení, napsaný v C++ a podporuje syntaxi JavaScriptu. Neexistuje žádná podpora SQL.

MongoDB má ovladače pro mnoho oblíbených programovacích jazyků (C, C++, C#, Go, Java, JavaScript, Perl, PHP, Python, Ruby atd.). Existují také neoficiální a komunitou podporované ovladače pro další programovací jazyky.

No, pojďme se podívat na základní příkazy, které se mohou hodit.

Takže k nasazení MongoDB v Dockeru, píšeme:

docker run -it --rm -p 127.0.0.1:27017:27017 
--name mongo-exp-project mongo
docker exec -it mongo-exp-project mongo

Tak se to stane spuštění klienta MongoDB:

Otevřít webinář „Základy MongoDB“

Nyní napíšeme ten tradiční Ahoj světe:

print (“Hello world!”)

Otevřít webinář „Základy MongoDB“

Potom - začněme cyklus:

Otevřít webinář „Základy MongoDB“

Jak jste si všimli, před námi běžný JS, a MongoDB je plnohodnotný interpret JavaScriptu.

Kdy použít MongoDB?

Existuje příběh, že průměrný startup v Silicon Valley je ten, kdo před týdnem otevřel knihu „HTML for Dummies“. Který stack si vybere? Souhlaste, že je pro něj velmi výhodné, když má z pochopitelných důvodů v prohlížeči JavaScript, na serveru běží Node.js a v databázi běží i JavaScript. Toto je bod číslo 1.

Za druhé, existuje skvělý výkon Peter Zaitsev, jeden z nejlepších databázových specialistů v Rusku. Peter v něm mluví o MySQL a MongoDB a věnuje zvláštní pozornost tomu, kdy a co je nejlepší použít.

Za třetí bych rád zdůraznil, že MongoDB se vyznačuje dobrým škálovatelnost - a to je jedna z klíčových vlastností databáze. Pokud předem nevíte, jaká bude zátěž, MongoDB je perfektní. Navíc podporuje out-of-the-box vzory jako např stříhání и replikace, a to vše se děje docela transparentně, to znamená, že je velmi pohodlné pracovat.

s ohledem na terminologie v MongoDB pak:

  • databáze jsou databáze (schémata, kolekce tabulek);
  • v MongoDB existuje něco jako kolekce - jedná se o analogii tabulky a sady dokumentů, které by logicky měly být propojeny;
  • dokumenty jsou analogické k řetězci.

Tvorba databáze a jednoduché dotazy

Chcete-li vytvořit databázi, stačí ji začít používat:

use learn

Otevřít webinář „Základy MongoDB“

Nyní uděláme malou vložku dokumentu. Ať je to například jednorožec jménem Aurora:

db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450})

db - globální objekt pro přístup k databázi, tedy ve skutečnosti samotná „monga“. Používá se ke střežení sh, pro replikaci - rs.

Jaké příkazy má objekt? db:

Otevřít webinář „Základy MongoDB“

Vraťme se tedy k našemu příkazu, v důsledku čehož konzole ohlásí, že byl vložen jeden řádek:

Otevřít webinář „Základy MongoDB“

Slovo unicorns v týmu db.unicorns.insert({name: 'Aurora', gender: 'f', weight: 450}) označuje sbírku. Vezměte prosím na vědomí, že jsme kolekci nepopisovali ani nevytvářeli, ale jednoduše jsme napsali ‚jednorožci‘, udělali přílohu a měli jsme sbírku.

A takto můžeme získat všechny naše sbírky:

db.getCollectionNames()

A tak dále. Umět vložte další sbírka:

Otevřít webinář „Základy MongoDB“

Teď se zeptejme kompletní kolekce (připomínáme, že v našem případě databáze již obsahuje informace o dvou jednorožcích se stejným jménem):

db.unicorns.find()

Vezměte prosím na vědomí, že zde je náš JSON (je zde jméno, pohlaví, váha, nějaký jedinečný identifikátor objektu):

Otevřít webinář „Základy MongoDB“

Nyní vložíme několik dalších jednorožců se stejnými jmény:

db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false}) 
db.unicorns.insert({name: 'Leto', gender: 'm', 
home: 'Arrakeen', worm: false})

A podívejme se, co se stalo:

Otevřít webinář „Základy MongoDB“

Jak vidíte, máme další pole: domov и červ, kterou Aurora nemá.

Přidejme ještě pár jednorožců:

db.unicorns.insertMany([{name: 'Horny', dob: new Date(1992,2,13,7,47), loves: ['carrot','papaya'], weight: 600, gender: 'm', vampires: 63}, 
{name: 'Aurora', dob: new Date(1991, 0, 24, 13, 0), loves: ['carrot', 'grape'], weight: 450, gender: 'f', vampires: 43}, 
{name: 'Unicrom', dob: new Date(1973, 1, 9, 22, 10), loves: ['energon', 'redbull'], weight: 984, gender: 'm', vampires: 182}, 
{name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], weight: 575, gender: 'm', vampires: 99}])

Vložili jsme tedy další čtyři objekty pomocí JavaScriptu:

Otevřít webinář „Základy MongoDB“

Ve kterých databázích je podle vás výhodnější ukládat pasová data: relační databáze nebo Mongo?

Odpověď je zřejmá - v Monga a výše uvedený příklad to dobře ukazuje. Není žádným tajemstvím, že KLADR je v Ruské federaci utrpením. A Monga se velmi dobře hodí k adresám, protože vše můžete nastavit jako pole a život bude mnohem jednodušší. A je to dobrý Uživatelské pouzdro pro MongoDB.

Přidejme další jednorožce:

db.unicorns.insert({name: 'Solnara', dob: new Date(1985, 6, 4, 2, 1), loves:['apple', 'carrot', 'chocolate'], weight:550, gender:'f', vampires:80}); 
db.unicorns.insert({name:'Ayna', dob: new Date(1998, 2, 7, 8, 30), loves: ['strawberry', 'lemon'], weight: 733, gender: 'f', vampires: 40}); 
db.unicorns.insert({name:'Kenny', dob: new Date(1997, 6, 1, 10, 42), loves: ['grape', 'lemon'], weight: 690, gender: 'm', vampires: 39}); 
db.unicorns.insert({name: 'Raleigh', dob: new Date(2005, 4, 3, 0, 57), loves: ['apple', 'sugar'], weight: 421, gender: 'm', vampires: 2}); 
db.unicorns.insert({name: 'Leia', dob: new Date(2001, 9, 8, 14, 53), loves: ['apple', 'watermelon'], weight: 601, gender: 'f', vampires: 33}); 
db.unicorns.insert({name: 'Pilot', dob: new Date(1997, 2, 1, 5, 3), loves: ['apple', 'watermelon'], weight: 650, gender: 'm', vampires: 54}); 
db.unicorns.insert({name: 'Nimue', dob: new Date(1999, 11, 20, 16, 15), loves: ['grape', 'carrot'], weight: 540, gender: 'f'}); 
db.unicorns.insert({name: 'Dunx', dob: new Date(1976, 6, 18, 18, 18), loves: ['grape', 'watermelon'], weight: 704, gender: 'm', vampires: 165});

Otevřít webinář „Základy MongoDB“

Nyní věnujte pozornost dokumentům. Tak jako dob Skladujeme celé předměty. Existují také informace o tom, co jednorožec miluje, a ne každý má tyto informace. Takže uvnitř leží plné pole.

Mimochodem, pro krásnější zobrazení výsledků můžete metodu zavolat na konci příkazu vyhledávání .pretty():

Otevřít webinář „Základy MongoDB“

Pokud potřebujete získat informace o nejnovější chybě, použijte následující příkaz:

db.getLastError()

To lze provést po každém vložení, nebo můžete nakonfigurovat Write Concern. Je lepší si o tom přečíst v oficiální dokumentace, který je mimochodem v Monga velmi informativní. Mimochodem, je k dispozici také na Habré dobrý článek při této příležitosti.

Pojďme ke složitějším dotazům

Dotaz na přesnou hodnotu pole:

db.unicorns.find({gender: 'm'})

Napsáním takové žádosti obdržíme ve výstupu konzole seznam všech samců jednorožců.

Můžete také udělat dotaz na několik polí najednou: podle pohlaví a podle hmotnosti:

Otevřít webinář „Základy MongoDB“

Výše věnujte pozornost speciálu $gt selektor, která umožňuje chovat všechny samce jednorožců vážící více než 700 kusů.

Můžeš zkontrolovat existuje vůbec obor?:

db.unicorns.find({vampires: {$exists: false}})

Nebo tak:

db.unicorns.find({'parents.father': {$exists: true}})

Další tým vyvede jednorožce, jejichž jména začínají písmeny A nebo a:

db.unicorns.find({name: {$regex: "^[Aa]"}})

Teď zvažte hledání pole. Otázka č. 1: Jaký bude výstup tohoto příkazu:

db.unicorns.find({loves:'apple'})

To je pravda: každý, kdo miluje jablka.

Následující příkaz vrátí pouze data obsahující jednorožce pouze jablka a melouny:

db.unicorns.find({loves:[ "apple", "watermelon" ]})

A ještě jeden příkaz:

db.unicorns.find({loves:[ "watermelon", "apple" ]})

V našem případě to nic nevrátí, protože když předáme pole, první prvek se porovná s prvním, druhý s druhým atd. To znamená, že pole se také musí shodovat podle pozic tyto hodnoty.

A takhle to vypadá prohledávání pole pomocí operátoru "OR".:

Otevřít webinář „Základy MongoDB“

Ukáže nám to následující příklad vyhledávání pomocí operátoru $all. A zde pořadí není důležité:

Otevřít webinář „Základy MongoDB“

Také můžeme hledat podle velikosti pole:

Otevřít webinář „Základy MongoDB“

Co když ale chceme najít pole, jehož velikost je větší než jedna? Na to existuje operátor $ kde, pomocí kterého můžete psát složitější věci:

db.unicorns.find({$where: function() { return this.loves && (this.loves.length > 1) } })

Mimochodem, pokud chcete cvičit, tady jsi soubor s příkazy.

Funkce kurzoru

Pojďme trochu odbočit a říci pár slov o vlastnostech Monga:

  • find() a další operace nevrací data - vrací tzv. „kurzor“;
  • skutečnost, že vidíme tištěná data, je dílem tlumočníka.

Psaní na stroji db.jednorožci.najít bez závorek dostaneme výzvu:

Otevřít webinář „Základy MongoDB“

Pokračujeme v plnění požadavků

Existuje také operátor $in:

db.unicorns.find({weight: {$in: [650, 704]}})

Otevřít webinář „Základy MongoDB“

Nyní pojďme mluvit o aktualizaci. Změňme například váhu jednorožce Rooooodles:

db.unicorns.update({name: "Roooooodles"}, {weight: 2222})

Výsledkem našeho jednání je dokument bude kompletně aktualizována zůstane v něm pouze jedno zadané pole:

Otevřít webinář „Základy MongoDB“

Čili jediné, co našemu objektu zůstane, je váha 2222 a samozřejmě id.

Situaci můžete napravit pomocí $set:

db.unicorns.update({_id: ObjectId("5da6ea4d9703b8be0089e6db")}, {$set: { "name" : "Roooooodles", "dob" : ISODate("1979-08-18T18:44:00Z"), "loves" : [ "apple" ], "gender" : "m", "vampires" : 99}})

Otevřít webinář „Základy MongoDB“

Je to také možné přírůstkové hodnoty:

Otevřít webinář „Základy MongoDB“

A existuje upsert - kombinace aktualizace a vložení:

Otevřít webinář „Základy MongoDB“

Zde je návod, jak se to dělá výběr pole:

Otevřít webinář „Základy MongoDB“

Otevřít webinář „Základy MongoDB“

Zbývá dodat pár slov o přeskočit и limit:

Otevřít webinář „Základy MongoDB“

Kolegové, to je vše, pokud chcete znát podrobnosti, podívejte se na celé video. A nezapomeňte zanechat své komentáře!

Zdroj: www.habr.com

Přidat komentář