Již několik let je MongoDB databází NoSQL pro jednotlivce i podniky vytvářející rozsáhlé aplikace. Je to open source, snadno škálovatelný a poskytuje vysokou dostupnost. Podporuje také velmi složité dotazy a jemné řízení souběžnosti.
Nezbytné úkoly, jako je instalace databáze, její vyladění pro udržení optimálního výkonu po dlouhou dobu a její zabezpečení, však obvykle vyžadují hodně kvalifikovaného a oddaného úsilí.
Naštěstí existuje jednodušší alternativa: MongoDB Atlas, plně spravovaná cloudová verze databáze.
S MongoDB Atlas můžete vytvořit MongoDB cluster na libovolném hlavním cloudovém poskytovateli dle vašeho výběru a začít tento cluster používat během několika minut. Pomocí uživatelského rozhraní Atlas založeného na prohlížeči můžete také intuitivně konfigurovat cluster a sledovat jeho výkon.
V tomto tutoriálu vám ukážu, jak vytvořit bezplatnou vrstvu clusteru MongoDB Atlas a používat jej v aplikaci Python.
Předpoklady
Než budete pokračovat, ujistěte se, že máte v počítači nainstalované a nakonfigurované následující:
- Python 3.4 nebo vyšší
- pip 18.0 nebo vyšší
1. Vytvoření clusteru
Abyste mohli používat cloudové služby MongoDB, budete potřebovat účet MongoDB Atlas. Chcete-li jej vytvořit, přejděte na jeho domovskou stránku a stiskněte tlačítko Začít zdarma tlačítko.
Po vyplnění krátkého registračního formuláře budete přesměrováni na průvodce vytvořením clusteru. V první části si budete muset vybrat poskytovatele cloudu a region, který preferujete.
Chcete-li minimalizovat latenci sítě, měli byste v ideálním případě vybrat oblast, která je nejblíže vašemu počítači. Protože však nyní vytváříme klastr bezplatných vrstev, ujistěte se, že oblast, kterou vyberete, je oblastí, která má k dispozici bezplatnou vrstvu. Pokud navíc jako vývojové prostředí používáte virtuální počítač Google Cloud nebo instanci Amazon EC2, vyberte nejprve příslušného poskytovatele cloudu.
V vrstvě clusteru vyberte M0 možnost vytvořit svůj bezplatný vrstvový cluster. Nabízí 512 MB úložného prostoru, nejnovější verzi MongoDB s WiredTiger jako úložištěm, sadu replik tří uzlů a velkorysých 10 GB šířky pásma za týden.
Nakonec dejte shluku smysluplný název a stiskněte Vytvořit cluster tlačítko.
MongoDB Atlas nyní zabere asi pět minut nastavení vašeho clusteru.
2. Konfigurace clusteru
Než začnete cluster používat, budete muset poskytnout několik podrobností týkajících se zabezpečení, takže přepněte na Zabezpečení kartu.
Nejprve v části Uživatelé MongoDB v sekci, musíte pro sebe vytvořit nového uživatele stisknutím tlačítka Přidat nového uživatele knoflík. V dialogovém okně, které se objeví, zadejte požadované uživatelské jméno a heslo, vyberte možnost Číst a zapisovat do libovolné databáze a stiskněte tlačítko Přidat uživatele tlačítko.
Dále v Bílé listině IP musíte poskytnout seznam IP adres, ze kterých budete ke clusteru přistupovat. Prozatím stačí uvést aktuální IP adresu vašeho počítače.
Stiskněte tlačítko Přidat adresu IP tlačítko pro vytvoření nové položky IP adresy. V dialogovém okně, které se otevře, stiskněte tlačítko Přidat aktuální IP adresu tlačítko pro automatické vyplnění Záznamu na bílé listině pole. Pokud navíc nemáte statickou IP adresu, je dobré označit, že se jedná o dočasný záznam zaškrtnutím možnosti Uložit jako dočasnou bílou listinu. volba. Nakonec stiskněte Potvrdit pro přidání položky.
3. Získání připojovacího řetězce
Pro připojení ke clusteru z vaší aplikace budete potřebovat platný připojovací řetězec. Chcete-li jej získat, přejděte na Přehled a stiskněte Připojit tlačítko.
V dialogovém okně, které se otevře, vyberte možnost Připojit aplikaci a stiskněte možnost Používám ovladač 3.6 nebo novější knoflík. Nyní byste měli být schopni vidět váš připojovací řetězec. Nebude mít vaše skutečné heslo, takže ho budete muset zadat ručně. Až tak učiníte, poznamenejte si řetězec, abyste jej mohli později použít.
4. Instalace ovladače Python
Abyste mohli programově komunikovat s clusterem MongoDB Atlas, musíte mít v počítači nainstalovaný ovladač MongoDB. Pro programovací jazyk Python je dnes PyMongo nejoblíbenějším dostupným ovladačem. Doporučený způsob instalace do počítače je použití pip
modul, jak je znázorněno níže:
python3 -m pip install pymongo --user
Možná jste si všimli, že váš připojovací řetězec MongoDB Atlas je mongodb+srv://
URI. Chcete-li povolit ovladači pracovat se záznamy DNS SRV, musíte také nainstalovat dnspython
modul. Zde je postup:
python3 -m pip install dnspython --user
5. Připojování ke klastru
Nyní můžete svůj MongoDB cluster používat z libovolné aplikace Pythonu. Chcete-li se mnou pokračovat, vytvořte nový skript Python a otevřete jej pomocí libovolného editoru kódu.
Aby bylo možné interagovat s clusterem uvnitř skriptu, budete potřebovat instanci MongoClient
třída. Jako jediný argument jeho konstruktoru předejte svůj připojovací řetězec.
import pymongo my_client = pymongo.MongoClient( 'mongodb+srv://alice:[email protected]/test?retryWrites=true' )
Výše uvedený konstruktor se okamžitě vrátí a nevyvolá žádné chyby. Chcete-li tedy zkontrolovat, zda jste úspěšně navázali připojení, doporučuji vám zkusit provést operaci na clusteru. Volání server_info()
bude stačit metoda, která vám poskytne různé podrobnosti o vaší instanci MongoDB.
Pokud ve vašem připojovacím řetězci nejsou žádné chyby, zavolá se server_info()
metoda uspěje. Pokud však zadané uživatelské jméno nebo heslo není správné, objeví se OperationFailure
chyba. Následující kód ukazuje, jak jej zachytit:
try: print("MongoDB version is %s" % my_client.server_info()['version']) except pymongo.errors.OperationFailure as error: print(error) quit(1)
Nyní můžete pokračovat a zkusit spustit skript.
6. Vkládání dokumentů
Výchozí připojovací řetězec, který získáte z webového rozhraní MongoDB Atlas, zmiňuje databázi s názvem test
. Pokračujme v používání stejné databáze. Zde je návod, jak na něj můžete získat odkaz:
my_database = my_client.test
Databáze MongoDB se skládá z jedné nebo více kolekcí, což nejsou nic jiného než skupiny dokumentů BSON (zkratka pro binární JSON). Váš bezplatný cluster na úrovni MongoDB Atlas může mít maximálně 500 kolekcí.
Pro realistický příklad vytvoříme novou kolekci s názvem foods
. S PyMongem k tomu nemusíte explicitně volat žádnou metodu. Můžete na něj jednoduše odkazovat, jako by již existoval.
my_collection = my_database.foods
Stojí za zmínku, že výše uvedený kód nevytváří foods
odběr ihned. Vytvoří se až poté, co do něj přidáte dokument. Pojďme tedy nyní vytvořit a přidat nový dokument obsahující nutriční údaje o potravině.
Pomocí insert_one()
metoda je nejjednodušší způsob, jak přidat dokument do kolekce. Chcete-li specifikovat obsah dokumentu, předáte metodě slovník Pythonu. Následující ukázkový kód ukazuje, jak na to:
my_collection.insert_one({ "_id": 1, "name": "pizza", "calories": 266, "fats": { "saturated": 4.5, "trans": 0.2 }, "protein": 11 })
Přidávat dokumenty jeden po druhém může být neefektivní. Pomocí insert_many()
můžete do sbírky přidat několik dokumentů najednou. Jako vstup očekává pole slovníků. Následující kód přidá do kolekce dva další dokumenty:
my_collection.insert_many([ { "_id": 2, "name": "hamburger", "calories": 295, "protein": 17, "fats": { "saturated": 5.0, "trans": 0.8 }, }, { "_id": 3, "name": "taco", "calories": 226, "protein": 9, "fats": { "saturated": 4.4, "trans": 0.5 }, } ])
_id
pole, které vidíte ve výše uvedených dokumentech, je pole, které MongoDB používá jako primární klíč. Jako takový je neměnný a musí být přítomen ve všech dokumentech MongoDB. Pokud jej zapomenete zahrnout při vytváření dokumentu, PyMongo jej za vás automaticky přidá a přiřadí mu automaticky vygenerovanou jedinečnou hodnotu.
7. Spouštění dotazů
Když do sbírky přidáte několik dokumentů, můžete na ně spouštět dotazy voláním find()
metoda, která vrací Cursor
objekt, přes který můžete iterovat. Pokud mu nepředáte žádné argumenty, find
vrátí všechny dokumenty ve sbírce.
Následující kód ukazuje, jak vytisknout názvy všech potravin přítomných v naší kolekci:
my_cursor = my_collection.find() for item in my_cursor: print(item["name"]) # Output is: # pizza # hamburger # taco
Pokud chcete find()
Pokud chcete vrátit pouze ty dokumenty, které odpovídají konkrétním kritériím, musíte jí předat slovník Pythonu. Například pokud chcete najít dokument, jehož name
pole nastaveno na "pizza", můžete použít následující kód:
my_cursor = my_collection.find({ "name": "pizza" })
Pro složitější dotazy můžete použít intuitivně pojmenované operátory dotazů MongoDB ve slovnících, které předáte find()
metoda. Například následující kód ukazuje, jak používat $lt
operátor k vyhledání dokumentů, jejichž calories
pole je nastaveno na hodnotu menší než 280:
my_cursor = my_collection.find({ "calories": { "$lt": 280 } }) for item in my_cursor: print("Name: %s, Calories: %d" % (item["name"], item["calories"])) # Output is: # Name: pizza, Calories: 266 # Name: taco, Calories: 226
Pomocí tečkové notace můžete ve svých dotazech používat také vnořená pole. Následující kód ukazuje, jak najít dokumenty, jejichž trans
pole, které je uvnitř fats
pole, je nastaveno na hodnotu, která je větší nebo rovna 0,5:
my_cursor = my_collection.find({ "fats.trans": { "$gte": 0.5 } }) for item in my_cursor: print("Name: %s, Trans fats: %.2f" % (item["name"], item["fats"]["trans"])) # Output is: # Name: hamburger, Trans fats: 0.80 # Name: taco, Trans fats: 0.50
8. Aktualizace a mazání dokumentů
Velmi podobné insert_one()
a insert_many()
metody jsou update_one()
a update_many()
metody, které můžete použít ke změně obsahu dokumentů, které jsou již ve vaší kolekci. Obě metody aktualizace kromě nových dat vyžadují dotaz na vynulování dokumentů, které je třeba změnit.
V metodách aktualizace můžete použít různé operátory aktualizace. Nejčastěji používaným je $set
, která umožňuje přidávat nová pole nebo aktualizovat hodnoty stávajících polí. Následující kód ukazuje, jak přidat dvě nová pole s názvem fiber
a sugar
k dokumentu, jehož name
pole je nastaveno na "taco":
my_collection.update_one( { "name": "taco" }, # query { "$set": { # new data "fiber": 3.95, "sugar": 0.9 } } )
Pokud dotaz předáte do update_one()
metoda vrací více než jeden dokument, aktualizuje se pouze první dokument. update_many()
metoda toto omezení nemá.
Nakonec pomocí delete_one()
a delete_many()
můžete odstranit dokumenty ve svých sbírkách. Obě metody potřebují dotaz k určení, které dokumenty je třeba odstranit. Zde je návod, jak můžete smazat všechny dokumenty, jejichž calories
pole je nastaveno na hodnotu menší než 300:
my_collection.delete_many({ "calories": { "$lt": 300 } }) # Deletes all the three documents