MongoDB I PHP

Share

Kratko upoznavanje sa MongoDB-om

MongoDB spada u red NoSQL baza podataka. NoSQL je tip baza podataka koji za razliku od mnogih relacionih baza ne pruža klasičan SQL interfejs za upravljanje podacima i skladišti iste na drugačiji način. Postoje tri vrste NoSQL baza, dokumentno orjentisane (document oriented), ključ-vrednost par vrsta (key-value pair) i tzv. Column-oriented. 

MongoDB je po strukturi dokumentno orijentisana baza podataka. Dokument kod MongoDB-a je set ključ-vrednost parova. Ovde se uvodi i pojam kolekcije (collection) koja je skup dokumenata i ekvivalent je “tabeli” (table) kod relacionih baza podataka. Bitna razlika između kolekcija i tabela je da kolekcije ne primenjuju šemu, što znači da dokumenti unutar jedne kolekcije mogu imati različita polja.

Primer kako izgleda dokument:

{

   _id: ObjectId(7df78ad8902c)

   name: 'John Doe',

   country: 'Germany',

   languages: ['German', 'English', 'Spanish']

}

Instalacija

*Linux Ubuntu korisnici

Instalacija MongoDB servera je veoma jednostavna , a uputstva su dostupna ovde https://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

PHP MongoDB klijentska ekstenzija se može instalirati putem pecl komande:

pecl install mongo

Povezivanje sa bazom

Kod za povezivanje sa serverom je veoma sličan kodu za povezivanje sa bilo kojim drugim tipom baza podataka.

Localhost:

$connection = new Mongo();

Remote host:

$connection = new Mongo(“IP Address:Port”);

Kada se uspostavi konekcija sa serverom neophodno je izabrati bazu sa kojom će se raditi.

Postoje dva načina.

$db = $connection->selectDB('dbname');

ili

$db = $connection->dbname;

Nakon toga neophodno je izabrati kolekciju sa kojom će se raditi.

$collection = $connection->selectCollection('people');

ili

$collection = $connection->people;

Dodavanje novog dokumenta

Za PHP developere MongoDB dokumenti predstavljaju obične asocijativne nizove.

To znači da su i sve operacije sa MongoDB-om definisane korišćenjem nizova.

$person = array(

                'name'    => 'John Doe',

                'email'    => 'john@doe.net',

                'address' => array(

                                                      array(

                                                                'country' => 'DE',

                                                                'zip'         => '11223',

                                                                'street'     => 'Jan Kaplung 6'

                                                      ),

                                                      array(

                                                                'country' => 'DE',

                                                                'zip'         => '11244',

                                                                'street'     => 'Leiplung  21'

                                                      ),

                                         ),

                'session' => 0,

);

$safe_insert = true;

$collection->insert($person, $safe_insert);

$person_identifier = $person['_id'];

Parametar $safe_insert prosleđen insert funkciji znači da će se sačekati da se zahtev izvrši kako bi moglo da se utvrdi da li je uspešan ili ne.

Ažuriranje postojećeg dokumenta

Kod ažuriranja postojećeg dokumenta, ako pošaljete regularan document on će u potpunosti zameniti kompletnu definiciju dokumenta. A ako želite promeniti samo neka polja, to možete učiniti na sledeći način.

Prvo je neophodno definisati filter kako bi ste ukazali MongoDB-u koji document konkretno da ažurira.

$filter  = array(‘email’ => ‘john@doe.net’);

$new_document = array(

                ‘$inc’ => array(‘session’ => 1),

                ‘$set’ => array(‘address.0.street’ => ‘Bond street 22’),

                ‘$unset’ => array(‘address.1’ => 1)

);

$options[‘multiple’] = false;

$collection->update($filter, $new_document, $options);

Prethodni primer podešava session polje na 1, street prve adrese na ‘Bond street 22’ i briše drugu adresu dokumenta.

MongoDB podržava i ažuriranje više dokumenata istovremeno. Za to je potrebno setovati opciju multiple na true.

Vraćanje dokumenta

Za vraćanje jednog ili više dokumenata takođe je neophodno definisati filter.

$filter  = array(‘email’ => ‘john@doe.net’);

$cursor = $collection->find($filter);

foreach($cursor as $user) {

                var_dump($user);

}

Brisanje dokumenta

Brisanje je veoma slično ažuriranju i vraćanju dokumenta.

$filter  = array(‘email’ => ‘john@doe.net’);

 $collection->remove($filter);

Zaključak

MongoDB može biti veoma interesantan izbor baze podataka.

A samo neki od razloga su:

  • Koristi JSON umesto XML-a
  • Veoma je brza jer je pisana u C++
  • Podržava index-e
  • Podržava operacije sa poddokumentima
  • Obezbeđuje nativnu PHP ekstenziju
Share

Prijavi se da prvi dobijaš nove blogove i vesti.

Оставите одговор

Slađan Dugić

Senior Backend Developer @Cosmic Development
mm

Slađan je Web Developer sa preko 10 godina iskustva  u izradi i implementaciji sofisticiranih internet aplikacija. Kljucne tehnologije koje je koristio tokom karijere su PHP, Laravel framework, Symfony framework, Magento, SQL/MySQL, NoSQL/MongoDB/Redis, JavaScript, AJAX, jQuery. Trenutno je zaposlen kao Senior Backend Developer u Cosmic Development-u.
 

Prijavi se da prvi dobijaš nove blogove i vesti.

Категорије