MongoDB com PHP:
pensando NoSQL


@ravanscafi
db.users.findOne({name: "Ravan Scafi"})
{
	"_id" : ObjectId("5d8ba3584bc1688665b19199"),
	"name" : "Ravan Scafi",
    "blog" : "https://ravan.me",
    "company" : {
        "name": "Leroy Merlin",
        "role": "Backend Developer"
    }
	"communities" : [ "PHPSP", "LaravelSP" ],
	"created_at" : ISODate("2019-09-25T17:27:07.709Z"),
	"updated_at" : ISODate("2019-09-25T17:27:07.709Z")
}

⚠️

O conteúdo será só a ponta do Iceberg

⚠️

Pode levantar a mão a qualquer momento!

🙋‍♀️

Comparing Database Types

MongoDB

  • NoSQL
  • Schemaless
  • Document-based
  • "JSON"
  • DB-Engine Ranking

    Bora lá então

    😎

    Subindo o MongoDB no Docker

    docker run --name mongo-test -p 27017:27017 -d mvertes/alpine-mongo
    
    docker exec -it mongo-test mongo

    MongoDB Compass

    (ok, agora pode descer)

    docker stop mongo-test
    
    docker rm mongo-test
    Leroy Merlin - Home
    Leroy Merlin - Furadeira
    Leroy Merlin - Cimento
    Leroy Merlin - Churrasqueira
    Leroy Merlin - Almofada
    Leroy Merlin - Palmeira

    E como modelar isso?

    Modelo EAV

    Entity-Attribute-Value

    (é o modelo do Magento)

    Campo JSON? Não existia.

    O MongoDB parecia uma boa opção...

    PHP MongoDB Extension
    PHP MongoDB Library

    mas...

    queríamos um Active Record

    Doctrine MongoDB
    Jenssegers Laravel-MongoDB

    As soluções existentes pra época

    pareciam tentar encaixar o MongoDB

    no modelo relacional

    Então...

    Mongolid
    Mongolid Laravel
    Devo usar MongoDB e NoSQL?

    Subindo nossa aplicação

    git clone git@github.com:ravanscafi/mongodb-workshop-base.git
    
    # ou https://github.com/ravanscafi/mongodb-workshop-base.git
    
    cd mongodb-workshop-base
    
    docker-compose up -d
    
    docker-compose exec php composer setup

    e abrir o localhost

    🚀

    Localhost
    Laravel Validation Rules
    To embed
    - or -
    not to embed?
    O Pensador

    O Mongolid pode evoluir muito!

    (e vocês podem ajudar!)

    Considerações

  • O MongoDB evoluiu muito, com validações, "joins", transactions...
  • Outros bancos correram muito atrás de recursos do MongoDB
  • Avalie seu uso, não existe bala de prata!
  • Recursos

    • Comparing Database Types: How Database Types Evolved to Meet Different Needs
    • DB-Engines Ranking
    • Devo usar NoSQL e MongoDB?

    Onde ir a seguir?

    • Mongolid
    • Mongolid Laravel
    • MongoDB University
    • Mongoose
    • MongoDB Compass
    MongoDB University

    Estamos Contratando!

    bit.ly/leroymerlin-backend
    bit.ly/leroymerlin-devops
    bit.ly/leroymerlin-frontend

    Dúvidas?

    🙋‍♀️

    Obrigado!

    bit.ly/avalie-phpcs-2019

    @ravanscafi