====== MongoDB ====== * dokumentová databáze * data má ve formátu JSON (na disku binární BSON) * databáze obsahuje kolekce (něco jako tabulky v SQL) * v databázi se nemusí nic vytvářet dopředu, vytvoří se při prvním zápisu * základní operace * find() - vyhledá data podle zadaných kritérií (pokud prázdné, tak vše) * insert() - vloží záznam * update() - aktualizuje záznam (upsert flag určuje, zda se má případně vytvořit nový) * remove() - odstraní záznam ===== Instalace ===== * databáze se instaluje jednoduše apt-get install mongodb * obdobně podpora v python apt-get install python-pymongo * u PHP je to složitější * existuje starší verze php rozšíření [[https://pecl.php.net/package/mongo|mongo]] a novější [[https://pecl.php.net/package/mongodb|mongodb]] * starší verze se inicializovala třídou ''MongoClient()'', novější používá ''MongoDB\Client'' * obě se mají instalovat přes [[https://pecl.php.net|php pecl]] * php rozšíření jsem našel v Debian balíčku (php-mongodb), ale byla tam moc stará verze, takže jsem musel použít pecl * mongodb rozšíření je pouze low level API (narozdíl od staršího), je třeba navíc nainstalovat [[http://php.net/manual/en/mongodb.tutorial.library.php|high level knihovnu]] přes [[https://getcomposer.org|composer]] apt-get install composer apt-get install php-pear # obsahuje pecl apt-get install php-dev # obsahuje phpize pecl install mongodb ln -s /etc/php/7.0/mods-available/mongodb.ini /etc/php/7.0/cli/conf.d/20-mongodb.ini ln -s /etc/php/7.0/mods-available/mongodb.ini /etc/php/7.0/apache2/conf.d/20-mongodb.ini systemctl restart apache2 cd /var/www// composer require mongodb/mongodb ===== Konzole ===== * konzole se spouští příkazem ''mongo'' * výběr databáze (pokud neexistuje, tak se založí) > use testdb switched to db testdb * po přepnutí je databáze dostupná pod ''db'' * seznam příkazů lze získat funkcí help() > db.help() DB methods: db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] db.auth(username, password) db.cloneDatabase(fromhost) .. * kolekce se vytvoří vložením prvního záznamu (pokud neexistuje) > db.people.insert({"name":"Jarda", "skills": [ "reading", "writing" ] ObjectId("4b76ef5780b71853fe6c89b6") * seznam příkazů pro kolekce lze opět získat funkcí help() > db.people.help() DBCollection help db.people.find().help() - show DBCursor help db.people.count( query = {}, ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeM ... db.people.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return. e.g. db.people.find( {x:77} , {name:1, x:1} ) db.people.find(...).count() db.people.find(...).limit(n) db.people.find(...).skip(n) db.people.find(...).sort(...) db.people.findOne([query], [fields], [options], [readConcern]) db.people.findOneAndDelete( filter, ) - delete first matching document, optional parameters are: projection, sort, maxTimeMS db.people.findOneAndReplace( filter, replacement, ) - replace first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocument db.people.findOneAndUpdate( filter, update, ) - update first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocument ... db.people.save(obj) ... db.people.update( query, object[, upsert_bool, multi_bool] ) - instead of two flags, you can pass an object with fields: upsert, multi db.people.updateOne( filter, update, ) - update the first matching document, optional parameters are: upsert, w, wtimeout, j db.people.updateMany( filter, update, ) - update all matching documents, optional parameters are: upsert, w, wtimeout, j ===== Python ===== * http://api.mongodb.com/python/current/tutorial.html from pymongo import MongoClient dbc = MongoClient() db = dbc.testdb db.people.find({},{"_id":0}) ===== PHP ===== * https://docs.mongodb.com/php-library/current/tutorial/ require_once 'vendor/autoload.php'; // include Composer's autoloader $dbc = new MongoDB\Client("mongodb://localhost:27017"); $db = $dbc->testdb; $people = array(); $res = $db->people->find([],[ "projection" => [ "_id" => 0 ]]); foreach ($res as $entry) { $people[] = $entry; } echo json_encode($people); ===== Odkazy ===== * https://www.mongodb.com/ * http://www.abclinuxu.cz/clanky/programovani/lehky-uvod-do-mongodb