MongoDB

A MongoDB egy NoSQL adatbázis json szerű formában tárolja az adatokat / dokumentumokat. Nagy mennyiségű adatok tárolására olvasására optimalizálták, emellett könnyen skálázható. Az adatok között nincs olyan szintű kapcsolat mint a relációs adatbázisok esetén.

Telepítsük debian-ra:
 
# apt-get install mongodb

Php csomag hozzá:
 
# apt-get install php-mongodb

A configjában ha szükséges átírhatjuk az ip-t, hogy kívülről is elérhető legyen. A /etc/mongodb.conf -fájlban a bind ip-t kell átírni, majd # service mongodb restart

Parancssorból így lehet belépni:
 
# mongo --host 192.168.1.2 --port 27017

Néhány parancsot fogunk kipróbálni.

Adatbázisok listája:
 
> show dbs

Adatbázis kiválasztása:
 
> use tesztDB

Felhasználó létrehozása "root" joggal:
 
> db.createUser({user: "felhasznalo", pwd: "jelszo", roles: [{role:"userAdminAnyDatabase", db: "admin" }]})

Dokumentum létrehozása, a "products" itt a collection -t jelenti:
 
> db.products.insert({label:"teszt2",value:"2"});

Products collection összes elemének elistája formázva:
 
> db.products.find().pretty();

Dokumentum módosítása:
 
> db.products.update({label:"teszt2"},{$set:{value:"3"});

Mező átnevezése:
 
> db.products.update({label:"teszt2"},{$rename:{value:"data"});

Mező törlés:
 
> db.products.update({label:"teszt2"},{$unset:{value:"valami"}});

Dokumentum törlés:
 
> db.products.remove({label:"teszt2"});

Dokumentum keresése:
 
> db.products.find({label:"teszt2"}).pretty();

Dokumentum darabszámai:
 
> db.products.find({label:"teszt2"}).pretty().count();

Dokumentumok label mezőinek a felsorolása:
 
> db.products.find().forEach(function(row){print("Label:"+row.label)});

Symfony-hoz a következő csomagokat tegyük fel:
 
# composer require alcaeus/mongo-php-adapter
# composer require doctrine/mongodb-odm-bundle

Az .env-be állítsuk be az adatbázis elérsét:
MONGODB_URL=mongodb://192.168.1.2:27017
MONGODB_DB=symfony

Hozzunk létre egy dokumentumot App\Document\Products.php
 
<?php

namespace App\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
 * @MongoDB\Document
 */
class Products
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\Field(type="string")
     */
    protected $label;

    /**
     * @MongoDB\Field(type="string")
     */
    protected $value;

    public function __construct()
    {

    }

    /**
     * Set label
     *
     * @param string $label
     * @return Products
     */
    public function setLabel($label)
    {
        $this->label = $label;

        return $this;
    }

    /**
     * Get label
     *
     * @return string
     */
    public function getLabel()
    {
        return $this->label;
    }

    /**
     * Set value
     *
     * @param string $value
     * @return Products
     */
    public function setValue($value)
    {
        $this->value = $value;

        return $this;
    }

    /**
     * Get value
     *
     * @return string
     */
    public function getValue()
    {
        return $this->value;
    }
}

A controllerben include-oljuk be a következőt:
 
use Doctrine\ODM\MongoDB\DocumentManager as DocumentManager;

Lista:
 
public function mongoList(DocumentManager $dm)
{
        $restresult = $dm->getRepository(Products::Class)->findAll();

Beszúrás:
 
public function mongoInsert(DocumentManager $dm)
{
        $user = new Products();
        $user->setLabel("Termék 1");
        $user->setValue("1");

        $dm->persist($user);
        $dm->flush();

Törlés, módosítás ugyanilyen módon működik, mint a fentiek.

MongoDb qui-nak használhatjuk a windows-ra gui-nak nosql-manager -t vagy a Robo3T-t.

https://www.mongodb.com/
https://robomongo.org/
https://www.mongodbmanager.com/
https://vfac.fr/blog/how-to-use-doctrine-mongo-db-with-symfony-4
 
2020.02.08.