Slide 1

Slide 1 text

Maykel S. Braz h.p://about.me/maykelsantosbraz PHP & MONGODB Aplicações PHP com MongoDB DOWNLOAD: h.p://bit.ly/php_mongodb

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

RESUMO •  RDBMS vs noSQL •  MongoDB •  PHogoDB Shoutbox •  Contato •  Referências APLICAÇÕES PHP COM MONGODB Let me cast some light in our path

Slide 4

Slide 4 text

RDBMS VS NOSQL APLICAÇÕES PHP COM MONGODB Fonte: IntelliPaat <>

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

DATABASES > show dbs local 0.000GB > use local switched to db local > show collections startup_log > mongo shell APLICAÇÕES PHP COM MONGODB

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

DOCUMENTOS APLICAÇÕES PHP COM MONGODB > use pessoas ... > db.amigos.find() { "_id": ObjectId() "nome": "eu" } > { "nome": "josh", "idade": 16, "cores": [ "vermelho", "verde" ] }

Slide 17

Slide 17 text

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?

Slide 18

Slide 18 text

> 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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

> 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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

> 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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

> 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

Slide 25

Slide 25 text

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 >

Slide 26

Slide 26 text

PHONGODB SHOUTBOX Botando a mão na massa

Slide 27

Slide 27 text

APLICAÇÕES PHP COM MONGODB

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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” ;)

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

TOP 10 LIKES Implementações –  Repositorio::top10Likes() –  templates/base.html.twig:27-36 •  Db::query() APLICAÇÕES PHP COM MONGODB Hot shouts #8

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

BUSCA TEXTO SHOUTS E PITACOS •  Repositorio::listShoutsBySearch() APLICAÇÕES PHP COM MONGODB #12

Slide 45

Slide 45 text

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"}) >

Slide 46

Slide 46 text

BUSCA GERAL •  Repositorio::listShoutsBySearch() APLICAÇÕES PHP COM MONGODB Eu vejo palavras por todos os lugares #13

Slide 47

Slide 47 text

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"}) >

Slide 48

Slide 48 text

PERGUNTAS? APLICAÇÕES PHP COM MONGODB [email protected] about.me/maykelsantosbraz Contato @maykelsb GitHub.com/maykelsb DOWNLOAD: h.p://bit.ly/php_mongodb

Slide 49

Slide 49 text

REFERÊNCIAS ü h.ps://docs.mongodb.com/manual ü h.ps://university.mongodb.com ü h.p://php.net/manual/pt_BR/set.mongodb.php APLICAÇÕES PHP COM MONGODB