Přátelé, další spuštění kurzu
Webinář se konal
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:
Nyní napíšeme ten tradiční Ahoj světe:
print (“Hello world!”)
Potom - začněme cyklus:
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
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
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:
Vraťme se tedy k našemu příkazu, v důsledku čehož konzole ohlásí, že byl vložen jeden řádek:
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:
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):
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:
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:
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});
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()
:
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
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:
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".:
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é:
Také můžeme hledat podle velikosti pole:
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,
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:
Pokračujeme v plnění požadavků
Existuje také operátor $in:
db.unicorns.find({weight: {$in: [650, 704]}})
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:
Č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}})
Je to také možné přírůstkové hodnoty:
A existuje upsert - kombinace aktualizace a vložení:
Zde je návod, jak se to dělá výběr pole:
Zbývá dodat pár slov o přeskočit и limit:
Kolegové, to je vše, pokud chcete znát podrobnosti,
Zdroj: www.habr.com