Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aplicações PHP com MongoDB

Aplicações PHP com MongoDB

Esta apresentação faz parte de um conjunto de ferramentas cujo objetivo é demonstrar, de forma prática, como é a integração do PHP com o MongoDB.

Recomendo que ela seja utilizada em laboratório em conjunto com o código fonte do repositório https://github.com/maykelsb/oficinamongo. A apresentação conduz os envolvidos durante a construção de um micro blog, implementando funcionalidades com dificuldade crescente.

No repositório, estão disponíveis duas versões do código fonte. A primeira delas é o esqueleto de um projeto, que deverá receber as queries do MongoDB. O segundo é o projeto completo, já com as queries implementadas.

Maykel Santos Braz

May 11, 2016
Tweet

More Decks by Maykel Santos Braz

Other Decks in Programming

Transcript

  1. APRESENTAÇÃO APLICAÇÕES PHP COM MONGODB Experiência e formação •  Graduado

    em Engenharia de Computação, UEMG •  Pós graduação em Desenvolvimento de Jogos Digitais, IESB •  ZCE PHP 5 •  Trabalhando com PHP desde 2006 •  Staff PHPDF
  2. RESUMO •  RDBMS vs noSQL •  MongoDB •  PHogoDB Shoutbox

    •  Contato •  Referências APLICAÇÕES PHP COM MONGODB Let me cast some light in our path
  3. RDBMS VS NOSQL APLICAÇÕES PHP COM MONGODB Fonte: IntelliPaat <<infográfico:

    https://br.pinterest.com/pin/122160208621136484/>>
  4. MONGODB •  mongod: Daemon do MongoDB •  mongo: mongo shell

    •  mongoimport: ferramenta de importação de dados •  mongoexport: ferramenta de exportação de dados APLICAÇÕES PHP COM MONGODB Ferramentas
  5. MONGOD > mongod --dbpath="." ... [initandlisten] waiting for connections on

    port 27017 ... APLICAÇÕES PHP COM MONGODB O daemon do MongoDB
  6. MONGOD > mongod --dbpath="." ... [initandlisten] waiting for connections on

    port 27017 ... Requisitos ./data/db APLICAÇÕES PHP COM MONGODB O daemon do MongoDB > mkdir data\db OU > mkdir –p data/db
  7. MONGOD > mongod --dbpath="." --shutdown killing process with pid: xxxx

    > IMPORTANTE: O comando deve ser executado de dentro da pasta pai de “data/db”, ou é necessário informar o caminho absoluto. APLICAÇÕES PHP COM MONGODB O finalizando o daemon
  8. MONGO SHELL APLICAÇÕES PHP COM MONGODB O console do MongoDB

    > mongo MongoDB shell version: 3.2.6 connecting to: test > •  Conecta-se com o servidor •  Permite enviar comandos –  De manipulação de dados –  Administrakvos
  9. DATABASES > show dbs local 0.000GB > use local switched

    to db local > show collections startup_log > mongo shell APLICAÇÕES PHP COM MONGODB
  10. DATABASES E COLLECTIONS Criação implícita > use pessoas switched to

    db pessoas > show dbs local 0.000GB > db.amigos.insert({nome: "eu"}) WriteResult({ “nInserted”: 1}) > show dbs local 0.000GB pessoas 0.000GB > show collections amigos > APLICAÇÕES PHP COM MONGODB mongo shell
  11. DATABASES E COLLECTIONS > use pessoas2 switched to db pessoas2

    > show dbs local 0.000GB pessoas 0.000GB > db.createCollection("amigos2") { “ok”: 1 } > show dbs local 0.000GB pessoas 0.000GB pessoas2 0.000GB > show collections amigos2 > APLICAÇÕES PHP COM MONGODB mongo shell Criação explícita
  12. DROPANDO DATABASES > use pessoas2 switched to db pessoas2 >

    db.dropDatabase() {“dropped”: “pessoas2”, “ok”: 1 } > show dbs local 0.000GB pessoas 0.000GB > APLICAÇÕES PHP COM MONGODB mongo shell
  13. DOCUMENTOS APLICAÇÕES PHP COM MONGODB > use pessoas switched to

    db pessoas > db.amigos.find() { "_id": ObjectId("57320674d10b3d0a347326b5 ") "nome": "eu" } >
  14. DOCUMENTOS APLICAÇÕES PHP COM MONGODB > use pessoas ... >

    db.amigos.find() { "_id": ObjectId() "nome": "eu" } > { "nome": "josh", "idade": 16, "cores": [ "vermelho", "verde" ] }
  15. MONGODB É SCHEMALESS •  Documentos não tem estrutura definida • 

    Insira novos registros sem se preocupar com sua estrutura > use pessoas switched to db pessoas > db.amigos.insert({"nome": "josh", "idade": 16, "cores": ["vermelho", "verde"]}) WriteResult({ “nInserted”: 1}) > APLICAÇÕES PHP COM MONGODB Schema? What schema?
  16. > use pessoas switched to pessoas db > db.amigos.find().pretty() {

    "_id": ObjectId("57320674d10b3d0a347326b5"), "nome": "eu” } { "_id": ObjectId("573216d9d10b3d0a347326b7"), "nome": "josh", "idade": 16, "cores": [ "vermelho", "verde" ] } > APLICAÇÕES PHP COM MONGODB
  17. DB.COLLECTION.FIND() Assinatura: cursor db.collecJon.find(query[, projecJon]) •  cursor: Retorno com uma

    lista de documentos •  query: Documento com o filtro da consulta •  projec>on: Documento que define os campos retornados APLICAÇÕES PHP COM MONGODB Encontrando registros
  18. > db.amigos.find({nome: "josh"}) > db.amigos.find({idade: {"$gt", 18}}) > db.amigos.find({"$and": [{idade:

    {"$gt": 18}}, {idade: {"$lt": 40}}] }) > db.amigos.find({cores: {"$exists": true}}, {"_id": 0, "nome": 1}) DB.COLLECTION.FIND() APLICAÇÕES PHP COM MONGODB
  19. DB.COLLECTION.UPDATE() Assinatura: WriteResult db.collecJon.update(query, update[, opJons]) •  WriteResult: Documento indicando

    o status da operação •  update: As modificações a serem aplicadas •  op>ons: Opções de modificação do funcionamento do update APLICAÇÕES PHP COM MONGODB Alterando documentos
  20. > db.amigos.update({nome: "josh"}, {"$set": {idade: 18}}) > db.amigos.update({nome: {"$eq": "eu"}},

    {"$addToSet": {"cores": "roxo"}}) DB.COLLECTION.UPDATE() APLICAÇÕES PHP COM MONGODB
  21. DB.COLLECTION.AGGREGATE() Assinatura: cursor db.collecJon.aggregate(pipeline[, opJons]) •  cursor: Retorno com uma

    lista de documentos •  pipeline: Conjunto de operações de agregação •  op>ons: Opções adicionais para o comando aggregate APLICAÇÕES PHP COM MONGODB Operações de agregação em documentos
  22. > db.amigos.aggregate([{"$group": {"_id": "$nome", "qtd": {"$sum": 1}}}]) > db.amigos.aggregate([{"$unwind": "$cores"},

    {"$group": {"_id": "$cores", "qtd": {"$sum": 1}}}]) > db.amigos.aggregate([{"$unwind": "$cores"}, {"$group": {"_id": "$cores", "qtd": {"$sum": 1}}}, {"$project": {"_id": 0, cores: "$_id", qtd: 1}}]) DB.COLLECTION.AGGREGATE() APLICAÇÕES PHP COM MONGODB
  23. MONGOIMPORT & MONGOEXPORT > mongoexport --db pessoas --collection amigos --out

    pessoas_amigos.json connected to: localhost exported 2 records > APLICAÇÕES PHP COM MONGODB Exportando e importando coleções > mongoimport --db pessoas2 --collection amigos --file pessoas_amigos.json connected to: localhost imported 2 documents >
  24. PHONGODB SHOUTBOX •  PHP 5.6 •  MongoDB 3.2 •  Ext.

    php_mongodb •  Bootstrap •  jQuery •  Bootbox •  Twig •  paskcbrain/php-fm •  Composer •  GitHub APLICAÇÕES PHP COM MONGODB Requerimentos e tecnologias
  25. BAIXANDO O CÓDIGO FONTE Ø  h.ps://github.com/maykelsb/oficinamongo/tree/vazio APLICAÇÕES PHP COM MONGODB

    PHongoDB Shoutbox download Se você tem uma conta no GitHub não se esqueça de “forkar” o projeto, desta forma você pode contribuir com “pull requests” ;)
  26. ESTRUTURA DO PROJETO APLICAÇÕES PHP COM MONGODB •  app: Arquivos

    e bibliotecas da aplicação •  database: Backup da base de dados •  templates: Templates do twig •  vendor: Bibliotecas de terceiros (pasta criada pelo composer) •  web: Diretório public da aplicação •  wiki: Arquivos uklizados pelo wiki no GitHub •  bower.json: Configurações do gerenciador de pacotes JS •  composer[.*]: Configurações, e o próprio gerenciador de pacotes PHP
  27. CONFIGURAÇÕES INICIAIS •  Descompacte os arquivos, ou clone o repositório,

    no seu DocumentRoot •  Execute o composer > php composer install •  Inicie o daemon do MongoDB > mongod --dbpath="path/para/data/db" •  Importe a base de dados > mongoimport --database blog --collection blog --file path/para/ database/blog_blog.json APLICAÇÕES PHP COM MONGODB
  28. LISTA DE SHOUTS Implementações –  Db::query() –  Respositorio::listShouts() •  MongoDB\Driver\Manager($connString)

    –  MongoDB\Driver\Manager::executeQuery() •  MongoDB\Driver\Query($filter, $opkons) •  MongoDB\Driver\Cursor APLICAÇÕES PHP COM MONGODB #1
  29. NOVOS SHOUTS Implementações –  Db::insert() –  Requisicoes::ackonShout() •  MongoDB\Driver\Manager($connString) – 

    MongoDB\Driver\Manager::executeBulkWrite() •  MongoDB\Driver\BulkWrite() –  MongoDB\Driver\BulkWrite::insert($document) •  MongoDB\BSON\UTCDateTime •  MongoDB\Driver\WriteResult APLICAÇÕES PHP COM MONGODB #2
  30. FILTRAR SHOUTS Implementações –  Repositorio::listShouts() –  Repositorio::listShoutsByWhen() –  Repositorio::listShoutsByShouter() • 

    Db::query() •  MongoDB\BSON\UTCDateTime APLICAÇÕES PHP COM MONGODB Filtros por shouter, tags e when #3
  31. ADICIONAR PITACOS Implementações –  Requisicoes::ackonPitaco() –  templates/parkals/post.html.twig:29 •  Db::update() • 

    MongoDb\BSON\ObjectID •  MongoDB\BSON\UTCDateTime APLICAÇÕES PHP COM MONGODB E nem vamos precisar de um dba #4
  32. TOMA UM LIKE! Implementações –  Requisicoes::ackonLike() –  Db::command() –  templates/parkals/post.html.twig:28

    •  MongoDB\Driver\Manager($connString) –  MongoDB\Driver\Manager::executeCommand() •  MongoDB\Driver\Command •  MongoDb\BSON\ObjectID •  MongoDB\BSON\UTCDateTime •  MongoDB\Driver\Cursor APLICAÇÕES PHP COM MONGODB Com esse tenho quantos joinhas? #5
  33. OS 5 MAIS ATIVOS Implementações –  Repositorio::top5Shouters() –  Db::aggregate() – 

    templates/base.html.twig:77 •  Db::command() •  Aggregakon pipeline –  "$group" –  "$project" –  "$sort" –  "$limit" APLICAÇÕES PHP COM MONGODB Quais são os shouters mais akvos? Me diga só os 5 primeiros #6
  34. AS TAGS MAIS USADAS Implementações –  Repositorio::topTags() –  templates/base.html.twig:78 • 

    Db::aggregate() •  Aggregakon pipeline –  "$project" –  "$unwind" –  "$group" –  "$project" –  "$sort" APLICAÇÕES PHP COM MONGODB Quais são as tags mais uklizadas pelos shouters? #7
  35. TOP 10 PITACADOS Implementações –  Repositorio::top10Pitacados() •  Db::aggregate() •  Aggregakon

    pipeline –  "$unwind" –  "$group" –  "$project" –  "$sort" –  "$limit" APLICAÇÕES PHP COM MONGODB Os shouts mais polêmicos #9
  36. SHOUTERS E PITAQUEIROS Re-implementação –  Repositorio::listShoutsByShouter() •  Db::query() •  Operador

    –  "$or" APLICAÇÕES PHP COM MONGODB Ou “encontrando um camarada em qualquer lugar” #10
  37. BUSCA TEXTO SHOUTS Implementações –  Repositorio::listShoutsBySearch() –  templates/base.html.twig:37-56 •  Db::query()

    •  Operador –  "$text" APLICAÇÕES PHP COM MONGODB Busca de palavras em um shout #11
  38. BUSCA TEXTO SHOUTS •  Db::query() •  Operador –  "$text" APLICAÇÕES

    PHP COM MONGODB Busca de palavras em um shout #11 > use blog > db.blog.createIndex({shout: "text"}) > Implementações –  Repositorio::listShoutsBySearch() –  templates/base.html.twig:37-56
  39. BUSCA TEXTO SHOUT E PITACOS •  Repositorio::listShoutsBySearch() APLICAÇÕES PHP COM

    MONGODB Busca de palavras em shouts e pitacos #12 > use blog > db.blog.getIndexes() ... "name": "shout_text" ... > db.blog.dropIndex("shout_text") > db.blog.createIndex({shout: "text", "pitacos.pitaco": "text"}) >
  40. BUSCA GERAL •  Repositorio::listShoutsBySearch() APLICAÇÕES PHP COM MONGODB Eu vejo

    palavras por todos os lugares #13 > use blog > db.blog.getIndexes() > db.blog.dropIndex ("shout_text_pitacos.pitaco_text") > db.blog.createIndex({"$**": "text"}) >