Uživatelské nástroje

Nástroje pro tento web


mongodb

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í mongo a novější mongodb
    • starší verze se inicializovala třídou MongoClient(), novější používá MongoDB\Client
  • obě se mají instalovat přes 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 high level knihovnu přes 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/<PROJEKT>/
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 = {}, <optional params> ) - 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, <optional params> ) - delete first matching document, optional parameters are: projection, sort, maxTimeMS
	db.people.findOneAndReplace( filter, replacement, <optional params> ) - replace first matching document, optional parameters are: projection, sort, maxTimeMS, upsert, returnNewDocument
	db.people.findOneAndUpdate( filter, update, <optional params> ) - 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, <optional params> ) - update the first matching document, optional parameters are: upsert, w, wtimeout, j
	db.people.updateMany( filter, update, <optional params> ) - update all matching documents, optional parameters are: upsert, w, wtimeout, j

Python

from pymongo import MongoClient
 
dbc = MongoClient()
db = dbc.testdb
 
db.people.find({},{"_id":0})

PHP

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

mongodb.txt · Poslední úprava: autor: 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki