SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
MongoDB com PHP
Jean Carlo Nascimento aka Suissa
Links
       nosqlbr.com.br
      jquerybrasil.org
   frontendbrasil.com.br
  javascriptbrasil.com.br
comoprogramarphp.com.br
     github.com/suissa
      about.me/suissa
       @osuissa
Introdução
NoSQL
Por que usar?
NoSQL
Onde usar?
NoSQL
Tipos de armazenamento?
Key/Value Store
Esse é o tipo de banco de dados NoSQL mais simples o conceito dele é uma
chave e um valor para essa chave, mas ele é o que aguenta mais carga de
dados. Esses tipos de bancos de dados, são o que tem a maior escalabilidade.

Berkeley DB
Tokyo Cabinet
Kyoto Cabinet
Project Voldermort
MemcacheDB
SimpleBD
Redis
Riak
Wide Column Store
Fortemente inspirados pelo BigTable do Google eles suportam várias linhas e
colunas, alem disso ele permite subcolunas. Alem do BigTable do google
outros que usam essa tecnologia são:

HBase(Apache)
HiperTable
Cassandra(Apache)
Document Store
Baseado em documentos XML ou JSON, podem ser localizados pelo seu id
unico ou por qualquer registro que tenha no documento.

CouchDB(Apache)
MongoDB
RavenDB
Graph Store
Com uma complexibilidade maior esses bancos de dados guardam objetos e
não registros como os outros tipos de NoSQL. A busca destes itens são feitas
pela navegação destes objetos.

Titan
Neo4J
InfoGrid
HyperGraphDB
Column Oriented Store
Esses são bancos de dados relacionais, porem eles tem caracteristicas do
NoSQL a principal diferença deles é que os dados são armazenados em
colunas, ajudando na escalabilidade.

Vertica
MonetDB
LucidDB
Infobright
Ingres/Vectorwise
Cases Reais
Um case real interessante é da Netflix que utiliza 3 bancos NoSQL: SimpleDB,
HBase e Cassandra.

http://techblog.netflix.com/2011/01/nosql-at-netflix.html
Cases Reais
Para o MongoDB que será nosso banco de estudo temos as seguintes
empresas utilizando-o em produção:


●   SAP
●   Craigslist
●   Shutterfly
●   foursquare
●   bit.ly
●   SourceForge
●   Disney
Cases Reais
●     MTV Networks
●     GitHub
●     Justin.tv
●     CollegeHumor
●     SugarCRM
●     GrooveShark
●     CartolaFC

http://www.mongodb.org/display/DOCS/Use+Cases
MongoDB
●   C++
●   JSON/BSON
●   Replica
●   Sharding
●   GridFS
●   Map/Reduce
MongoDB - Instalação
●   Mac
●   Linux
●   Windows
MongoDB - Terminologia
    SQL RDBMS   MongoDB


    DATABASE    DATABASE

    TABLE       COLLECTION

    ROWS        JSON

    QUERY       DOCUMENT

    INDEX       QUERY

    PARTITION   INDEXSHARD
MongoDB - Coleção
use minha_database

show dbs

db.nome_da_collection.comando()


Ex.:
db.nome_da_collection.drop() //apaga coleção

db.nome_da_collection.remove() //limpa coleção
MongoDB - Inserção
prof1 = {"nome": "Jean Carlo Nascimento", "apelido": "suissa", "idade": 27, "disciplinas":
["MongoDB", "PHP"]};
db.professores.insert(prof1)

prof2 = {"nome": "Wesley William", "apelido": "wesley", "idade": 25, "disciplinas": ["PHP"]};
db.professores.insert(prof2)


// lembrando que o JSON valido necessita de aspas no nome do campo
MongoDB - Consulta
db.colecao.find({clausulas, campos})

Ex.:
select * from professores where apelido = "suissa"
db.professores.find( { apelido : "suissa" } );

select * from professores where nome LIKE "Jean*"
db.professores.find( { nome : /Jean*/i } );
db.professores.find( { nome : { $regex : 'Jean*'} } );

select nome, idade from professores
db.professores.find(null, {nome:1, idade:1} )

select nome, idade from professores where apelido = "suissa"
db.professores.find( { apelido : "suissa" }, { nome:1, idade:1 } );
MongoDB - Operadores
$lt - menor que <

$lte - menor ou igual que <=

$gt - maior que >

$gte - maior ou igual que >=
MongoDB - Operadores
$all - retorna o objeto onde todos os valores foram encontrados

$exists - retorna o objeto caso uma chave existe

$or - retorna o objeto caso a cláusula OU for verdadeira

$and - retorna o objeto caso a cláusula E for verdadeira

$type - retorna o objeto caso a chave seja do tipo especificado para conferir a lista dos
tipos e seus valores acesse: Lista dos tipos e seus valores
MongoDB - Operadores
$ne- retorna o objeto onde o valor não foi encontrado

$in- retorna o objeto se o valor foi encontrado

$nin- retorna o objeto se nenhum dos valores foi encontrado

$nor- retorna o objeto caso a cláusula negação do OU for verdadeira

$mod - retorna o objeto quando o módulo de um valor foi encontrado
MongoDB - Count
select count(*) from professores
db.professores.count()

select count(*) from professores where idade > 30
db.professores.count({idade:{$lt: 30}})
MongoDB - Ordenação
select * from professores order by nome ASC
db.professores.find().sort({nome:1})

select * from professores order by idade DESC
db.professores.find().sort({idade:-1})
MongoDB - Limit
select * from professores order by nome ASC limit 0,2
db.professores.find().sort({nome:1}).limit(2)

select * from professores limit 2 offset 10
db.professores.find().limit(2).skip(10)
MongoDB - Alteração
professor = db.professores.findOne( { name : "Jean" } );
professor.idade = 28;
db.professores.save(professor);

//lembrando que o findOne retorna apenas um registro
//pois o find mesmo retornando um registro retornará dentro de um cursor
MongoDB - Exclusão
db.professores.remove(); // exclui tudo
db.things.remove({nome: "Jean"}); // exclui todos os registro com nome = Jean
MongoDB - Índices
Para criarmos um índice usamos o ensureIndex().

db.professores.ensureIndex({ email:1 });



Para pegarmos todos os índices da nossa collection professores usamos getIndexes().

db.professores.getIndexes()



Para pegar todos os índices da database usamos o find() em uma collection do sistema.

db.system.indexes.find()
Sharding - O que é
Sharding é a divisão da informação em partes iguais e divididas entre os nós.
Sharding - Como funciona
O MondoDB ira dividir nossas informações através dos servidores de sharding setados em
sua configuração, levando em conta a shard key.
Sharding - Configurando
Primeiramente precisamos criar os serviços de sharding. Esse exemplo é apenas didático e
será rodado em apenas um servidor.

mkdir /data/db/a /data/db/b

mongod --shardsvr --dbpath /data/db/a --port 10000 > /tmp/sharda.log &
cat /tmp/sharda.log

mongod --shardsvr --dbpath /data/db/b --port 10001 > /tmp/shardb.log &
cat /tmp/shardb.log


Obs.: O cat serve apenas para verificarmos se o serviço subiu realmente e o & serve para
rodar em background.
Sharding - Configurando
Vamos configurar os servidores.

mkdir /data/db/config

mongod --configsvr --dbpath /data/db/config --port 20000 > /tmp/configdb.log &
cat /tmp/configdb.log

mongos --configdb localhost:20000 > /tmp/mongos.log &
cat /tmp/mongos.log
Sharding - Configurando
Precisamos dizer qual database, collection e nossa shard key.

db.runCommand( { enablesharding : "test" } )
{"ok" : 1}

db.runCommand( { shardcollection : "test.people", key : {name : 1} } )
{ "collectionsharded" : "test.people", "ok" : 1 }
Sharding - PHP
$mongo->selectDB('admin')->command(array('addshard'=>'hostname:port'));
MongoDB - GridFS
GridFS é o sistema de arquivos do MongoDb e deve ser usado quando precisamos
armazenar arquivos maiores que 1Mb.

mongofiles -d myfiles put my_music.mp3
connected to: 127.0.0.1

added file: {
 _id: ObjectId('4ce9ddcb45d74ecaa7f5a029'),
 filename: "my_music.mp3",
 chunkSize: 262144,
 uploadDate: new Date(1290395084166),
 md5: "7872291d4e67ae8b8bf7aea489ab52c1",
 length: 1419631 }
MongoDB - GridFS - inserindo
  $conn = new Mongo("127.0.0.1:27017");            // Connect
    $db = $conn->uniform_server;              // Select DB
    $db->authenticate("user","password");         // Authenticate to MongoDB
    $grid = $db->getGridFS();              // Initialize GridFS
    $name = $_FILES['Filedata']['name'];        // Get Uploaded file name
    $type = $_FILES['Filedata']['type'];    // Try to get file extension
    $id = $grid->storeUpload('Filedata',$name); // Store uploaded file to GridFS
MongoDB - GridFS - inserindo
  Mais exemplos em: http://blog.hardkap.com/index.php/posts/00069/MongoDB---GridFS
MongoDB - GridFS - listando
 $conn = new Mongo("127.0.0.1:27017");           // Connect
   $db = $conn->uniform_server;             // Select DB
   $db->authenticate("user","password");        // Authenticate to MongoDB
   $grid = $db->getGridFS();             // Initialize GridFS

   $cursor = $grid->find();

   foreach ($cursor as $obj) {           // iterate through the results
      echo 'Filename: '.$obj->getFilename().' Size: '.$obj->getSize().'<br/>';
   }

   $conn->close();                      // Disconnect from Server
   exit(0);
MongoDB - DBRef
DBRef é o esquema nativo de referencia interna entre os documentos. O driver do PHP
executará a query no objeto desejada, trazendo os objetos referenciados via DBRef
diretamente.
MongoDB - DBRef
DBRefs possui os seguintes campos:

$ref: nome da collection referenciada.

$id: valor do _id do documento referenciado.

$db: opcional e contém o nome da database onde o documento esta referenciado.

*Apenas alguns drivers possuem suporte.

Um documento DBRef pode ser exemplificado assim:

                        { $ref : <value>, $id : <value>, $db : <value> }

            new DBRef ( 'customers' , ObjectId("4ef4a61a90eec3e3c748263c") )
MongoDB - DBRef
Inserir esses registros:

db.fruit.save ({"_id" : "1" , "name" : "apple"});
db.fruit.save ({"_id" : "2" , "name" : "grape"});
db.fruit.save ({"_id" : "3" , "name" : "orange"});
db.fruit.save ({"_id" : "4" , "name" : "pineapple"});

db.basket.save ({"_id" : "1", "items" : [
    {"quantity" : 5 , item : {"$ref" : "fruit", "$id" : "1"}},
    {"quantity" : 10, item : {"$ref" : "fruit", "$id" : "3"}}
]})

db.basket.find ()
MongoDB - Admin UIs
Sistemas para administração visual são uma mão na roda para qualquer Banco de dados,
como o largamente usado phpmyadmin, para o Mysql. Não seria diferente para o MongoDB,
existem diversos sistemas desses nas mais variadas linguagens, uma boa listagem se
encontra em http://www.mongodb.org/display/DOCS/Admin+UIs


AdminUIs para PHP:

PhpMoAdmin - http://www.phpmoadmin.com/

RockMongo - http://code.google.com/p/rock-php/wiki/rock_mongo
MongoDB - PHPMoAdmin
http://www.phpmoadmin.com/
MongoDB - RockMongo
http://rockmongo.com/

Para se logar use login e senha: admin.
MongoDB - RockMongo
http://rockmongo.com/

Para se logar use login e senha: admin.
MongoDB - Frameworks
Vários frameworks e CMS de PHP já possuem um biblioteca para trabalhar com o MongoDB,
dentre eles posso listar:

CakePHP:
https://github.com/ichikaway/cakephp-mongodb

Codeigniter:
https://github.com/kyledye/MongoDB-CodeIgniter-Driver

FatFree
http://fatfree.sourceforge.net/page/data-mappers

Kohana
https://github.com/Wouterrr/mangodb

Lithium
http://lithify.me/docs/lithium/data/source/MongoDb
MongoDB - Frameworks
Symfony 2 :
http://code.google.com/p/mongodbloganalyzer/
http://www.symfony-project.org/plugins/sfStoragePerformancePlugin
https://github.com/brtriver/sfMongoSessionStorage

Yii
http://canni.github.com/YiiMongoDbSuite/

Zend Framework
https://github.com/coen-hyde/Shanty-Mongo
https://github.com/stunti/Stunti_Cache_Backend_Mongo
http://framework.zend.com/wiki/display/ZFPROP/Zend_Nosql_Mongo+-+Valentin+Golev

Drupal:
http://drupal.org/project/mongodb
MongoDB - Hosts
Existem alguns serviços onde você pode hospedar bancos MongoDB:

MongoHQ - https://mongohq.com/
HostedMongo - http://hostedmongo.com/
MongoLab - https://mongolab.com/home/
MongoGrid - http://nodegrid.com/resources/mongogrid/
Map/Reduce
O map/reduce foi um framework desenvolvido pelo Google para iterar em grandes coleções
de dados paralelamente. Baseado nas funções de map e reduce da programação funcional.

A ideia é mapear seus dados através de suas coleções e depois reduzir esses dados em
uma informação.

db.collection.mapReduce(mapfunction,reducefunction[,options]);

m = function() { emit(this.user_id, 1);

r = function(k,vals) { return 1; }

res = db.posts.mapReduce(m, r, { query : {tag:'php'} });

db[res.result].find()
Map/Reduce
//map
 function() {
    emit( this.username, {count: 1, likes: this.likes} );
  }

//reduce
  function(key, values) {
   var result = {count: 0, likes: 0};

     values.forEach(function(value) {
       result.count += value.count;
       result.likes += value.likes;
     });

     return result;
 }
Map/Reduce
Fazer o exemplo 2: http://www.mongodb.org/display/DOCS/MapReduce
MongoDB - Códigos
MongoDB - Conexão
$conexao = new Mongo();
$db = $conexao->$nome_banco;
$collection = $db->$nome_collection;
MongoDB - Exemplos PHP
INSERT INTO USERS VALUES(1,1)
$db->users->insert(array("a" => 1, "b" => 1));

SELECT a,b FROM users
$db->users->find(array(), array("a" => 1, "b" => 1));

SELECT * FROM users WHERE age=33
$db->users->find(array("age" => 33));

SELECT a,b FROM users WHERE age=33
$db->users->find(array("age" => 33), array("a" => 1, "b" => 1));

SELECT a,b FROM users WHERE age=33
$db->users->find(array("age" => 33), array("a" => 1, "b" => 1));

SELECT a,b FROM users WHERE age=33 ORDER BY name
$db->users->find(array("age" => 33), array("a" => 1, "b" => 1))->sort(array("name" => 1));
MongoDB - Exemplos PHP
SELECT * FROM users WHERE age>33
$db->users->find(array("age" => array('$gt' => 33)));

SELECT * FROM users WHERE age<33                <br />$db->users->find(array("age" => array
('$lt' => 33)));

SELECT * FROM users WHERE name LIKE "%Joe%"
$db->users->find(array("name" => new MongoRegex("/Joe/")));

SELECT * FROM users WHERE name LIKE "Joe%"
$db->users->find(array("name" => new MongoRegex("/^Joe/")));

SELECT * FROM users WHERE age>33 AND age<=40
$db->users->find(array("age" => array('$gt' => 33, '$lte' => 40)));
MongoDB - Exemplos PHP
SELECT * FROM users ORDER BY name DESC
$db->users->find()->sort(array("name" => -1));

CREATE INDEX myindexname ON users(name)
$db->users->ensureIndex(array("name" => 1));

CREATE INDEX myindexname ON users(name,ts DESC)
$db->users->ensureIndex(array("name" => 1, "ts" => -1));

SELECT * FROM users WHERE a=1 and b='q'
$db->users->find(array("a" => 1, "b" => "q"));

SELECT * FROM users LIMIT 10 SKIP 20
$db->users->find()->limit(10)->skip(20);

SELECT * FROM users WHERE a=1 or b=2
$db->users->find(array('$or' => array(array("a" => 1), array("b" => 2))));
MongoDB - Exemplos PHP
SELECT * FROM users LIMIT 1
$db->users->find()->limit(1);

EXPLAIN SELECT * FROM users WHERE z=3
$db->users->find(array("z" => 3))->explain()

SELECT DISTINCT last_name FROM users
$db->command(array("distinct" => "users", "key" => "last_name"));

SELECT COUNT(*) FROM users
$db->users->count();

SELECT COUNT(*) FROM users where AGE > 30
$db->users->find(array("age" => array('$gt' => 30)))->count();
MongoDB - Exemplos PHP
SELECT COUNT(AGE) from users
$db->users->find(array("age" => array('$exists' => true)))->count();

UPDATE users SET a=1 WHERE b='q'
$db->users->update(array("b" => "q"), array('$set' => array("a" => 1)));

UPDATE users SET a=a+2 WHERE b='q'
$db->users->update(array("b" => "q"), array('$inc => array("a" => 2)));

DELETE FROM users WHERE z="abc"
$db->users->remove(array("z" => "abc"));
MongoDB - Tarefa

Mais conteúdo relacionado

Mais procurados

Modificadores de substantivo
Modificadores de substantivoModificadores de substantivo
Modificadores de substantivocassiousp46
 
Como aprender Inglês com filmes
Como aprender Inglês com filmesComo aprender Inglês com filmes
Como aprender Inglês com filmesftmcicdamas
 
Exercicios de morfologia
Exercicios de morfologiaExercicios de morfologia
Exercicios de morfologiaCelio Carneiro
 
06 - Verbos significativos e verbos de ligação
06 - Verbos significativos e verbos de ligação06 - Verbos significativos e verbos de ligação
06 - Verbos significativos e verbos de ligaçãoNAPNE
 
4759750 exercicio-de-oracoes-subordinadas-substantivas
4759750 exercicio-de-oracoes-subordinadas-substantivas4759750 exercicio-de-oracoes-subordinadas-substantivas
4759750 exercicio-de-oracoes-subordinadas-substantivasUNIP
 
Descritores spaece - língua portuguesa
Descritores   spaece - língua portuguesaDescritores   spaece - língua portuguesa
Descritores spaece - língua portuguesaPacatubaLei
 
7º ano E. F. II - Preposição, Crase
7º ano E. F. II - Preposição, Crase7º ano E. F. II - Preposição, Crase
7º ano E. F. II - Preposição, CraseAngélica Manenti
 
Mapa Mental de Arte - Vanguardas Europeias.docx
Mapa Mental de Arte - Vanguardas Europeias.docxMapa Mental de Arte - Vanguardas Europeias.docx
Mapa Mental de Arte - Vanguardas Europeias.docxPolianaMendes21
 
AULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.ppt
AULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.pptAULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.ppt
AULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.pptMarliaLiloca
 
Slide Gênero Textual Notícia
Slide Gênero Textual NotíciaSlide Gênero Textual Notícia
Slide Gênero Textual NotíciaJomari
 
Verbos de comando.pptx
Verbos de comando.pptxVerbos de comando.pptx
Verbos de comando.pptxGeiza Prado
 
Aposto e vocativo
Aposto e vocativoAposto e vocativo
Aposto e vocativoLuciane
 
Polissemia e ambiguidade
Polissemia e ambiguidadePolissemia e ambiguidade
Polissemia e ambiguidadeLilian Hodgson
 

Mais procurados (20)

Adjunto adverbial
Adjunto adverbialAdjunto adverbial
Adjunto adverbial
 
Modificadores de substantivo
Modificadores de substantivoModificadores de substantivo
Modificadores de substantivo
 
Slides sobre reportagem
Slides sobre reportagemSlides sobre reportagem
Slides sobre reportagem
 
Como aprender Inglês com filmes
Como aprender Inglês com filmesComo aprender Inglês com filmes
Como aprender Inglês com filmes
 
Exercicios de morfologia
Exercicios de morfologiaExercicios de morfologia
Exercicios de morfologia
 
06 - Verbos significativos e verbos de ligação
06 - Verbos significativos e verbos de ligação06 - Verbos significativos e verbos de ligação
06 - Verbos significativos e verbos de ligação
 
Atividade sobre figuras de linguagem
Atividade sobre figuras de linguagemAtividade sobre figuras de linguagem
Atividade sobre figuras de linguagem
 
4759750 exercicio-de-oracoes-subordinadas-substantivas
4759750 exercicio-de-oracoes-subordinadas-substantivas4759750 exercicio-de-oracoes-subordinadas-substantivas
4759750 exercicio-de-oracoes-subordinadas-substantivas
 
Descritores spaece - língua portuguesa
Descritores   spaece - língua portuguesaDescritores   spaece - língua portuguesa
Descritores spaece - língua portuguesa
 
7º ano E. F. II - Preposição, Crase
7º ano E. F. II - Preposição, Crase7º ano E. F. II - Preposição, Crase
7º ano E. F. II - Preposição, Crase
 
Mapa Mental de Arte - Vanguardas Europeias.docx
Mapa Mental de Arte - Vanguardas Europeias.docxMapa Mental de Arte - Vanguardas Europeias.docx
Mapa Mental de Arte - Vanguardas Europeias.docx
 
AULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.ppt
AULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.pptAULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.ppt
AULA 04 - TIPOS DE SUJEITO e EXERCÍCIOS.ppt
 
Slide Gênero Textual Notícia
Slide Gênero Textual NotíciaSlide Gênero Textual Notícia
Slide Gênero Textual Notícia
 
Mau ou mal
Mau ou malMau ou mal
Mau ou mal
 
ORAÇÕES REDUZIDAS.pptx
ORAÇÕES REDUZIDAS.pptxORAÇÕES REDUZIDAS.pptx
ORAÇÕES REDUZIDAS.pptx
 
Verbos de comando.pptx
Verbos de comando.pptxVerbos de comando.pptx
Verbos de comando.pptx
 
Aposto e vocativo
Aposto e vocativoAposto e vocativo
Aposto e vocativo
 
Aula 01 - Simple Past
Aula 01  - Simple PastAula 01  - Simple Past
Aula 01 - Simple Past
 
Polissemia e ambiguidade
Polissemia e ambiguidadePolissemia e ambiguidade
Polissemia e ambiguidade
 
Predicado ppt
Predicado pptPredicado ppt
Predicado ppt
 

Semelhante a MongoDB com PHP

Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBLuiz Duarte
 
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...Tchelinux
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 

Semelhante a MongoDB com PHP (20)

Mongo DB
Mongo DBMongo DB
Mongo DB
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
Escalando MongoDB com Docker - Cristiano dos Santos Diedrich - Tchelinux Bent...
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 

Mais de Suissa

ES6 funcional TDC - Suissa
ES6 funcional TDC - SuissaES6 funcional TDC - Suissa
ES6 funcional TDC - SuissaSuissa
 
TypeScript - Olhe teu tipo, script slides
TypeScript - Olhe teu tipo, script slidesTypeScript - Olhe teu tipo, script slides
TypeScript - Olhe teu tipo, script slidesSuissa
 
Mongoose - Melhores práticas usando MongoDB e Node.js
Mongoose - Melhores práticas usando MongoDB e Node.jsMongoose - Melhores práticas usando MongoDB e Node.js
Mongoose - Melhores práticas usando MongoDB e Node.jsSuissa
 
Atomic design
Atomic design Atomic design
Atomic design Suissa
 
Palestra node.js
Palestra   node.js Palestra   node.js
Palestra node.js Suissa
 
Be MEAN JSConf Uruguay - Suissa
Be MEAN JSConf Uruguay - SuissaBe MEAN JSConf Uruguay - Suissa
Be MEAN JSConf Uruguay - SuissaSuissa
 
Atomic design
Atomic designAtomic design
Atomic designSuissa
 
Be MEAN
Be MEANBe MEAN
Be MEANSuissa
 
Be mean
Be meanBe mean
Be meanSuissa
 
Devcast node.js e mongo db o casamento perfeito
Devcast   node.js e mongo db o casamento perfeitoDevcast   node.js e mongo db o casamento perfeito
Devcast node.js e mongo db o casamento perfeitoSuissa
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código abertoSuissa
 
Flisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeitoFlisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeitoSuissa
 
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafosPh pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafosSuissa
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript modernoSuissa
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesSuissa
 
7 masters wordpress - advanced queries
7 masters   wordpress - advanced queries7 masters   wordpress - advanced queries
7 masters wordpress - advanced queriesSuissa
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript modernoSuissa
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código abertoSuissa
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slidesSuissa
 

Mais de Suissa (20)

ES6 funcional TDC - Suissa
ES6 funcional TDC - SuissaES6 funcional TDC - Suissa
ES6 funcional TDC - Suissa
 
TypeScript - Olhe teu tipo, script slides
TypeScript - Olhe teu tipo, script slidesTypeScript - Olhe teu tipo, script slides
TypeScript - Olhe teu tipo, script slides
 
Mongoose - Melhores práticas usando MongoDB e Node.js
Mongoose - Melhores práticas usando MongoDB e Node.jsMongoose - Melhores práticas usando MongoDB e Node.js
Mongoose - Melhores práticas usando MongoDB e Node.js
 
Atomic design
Atomic design Atomic design
Atomic design
 
Palestra node.js
Palestra   node.js Palestra   node.js
Palestra node.js
 
Be MEAN JSConf Uruguay - Suissa
Be MEAN JSConf Uruguay - SuissaBe MEAN JSConf Uruguay - Suissa
Be MEAN JSConf Uruguay - Suissa
 
Atomic design
Atomic designAtomic design
Atomic design
 
Be MEAN
Be MEANBe MEAN
Be MEAN
 
Be mean
Be meanBe mean
Be mean
 
Devcast node.js e mongo db o casamento perfeito
Devcast   node.js e mongo db o casamento perfeitoDevcast   node.js e mongo db o casamento perfeito
Devcast node.js e mongo db o casamento perfeito
 
Secot banco de dados no sql de código aberto
Secot   banco de dados no sql de código abertoSecot   banco de dados no sql de código aberto
Secot banco de dados no sql de código aberto
 
Flisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeitoFlisol - Nodejs e MongoDb o casamento perfeito
Flisol - Nodejs e MongoDb o casamento perfeito
 
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafosPh pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript moderno
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
DevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slidesDevDay - MongoDb no mundo real - slides
DevDay - MongoDb no mundo real - slides
 
7 masters wordpress - advanced queries
7 masters   wordpress - advanced queries7 masters   wordpress - advanced queries
7 masters wordpress - advanced queries
 
Javascript moderno
Javascript modernoJavascript moderno
Javascript moderno
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Mongo db no mundo real slides
Mongo db no mundo real   slidesMongo db no mundo real   slides
Mongo db no mundo real slides
 

MongoDB com PHP

  • 1. MongoDB com PHP Jean Carlo Nascimento aka Suissa
  • 2. Links nosqlbr.com.br jquerybrasil.org frontendbrasil.com.br javascriptbrasil.com.br comoprogramarphp.com.br github.com/suissa about.me/suissa @osuissa
  • 7. Key/Value Store Esse é o tipo de banco de dados NoSQL mais simples o conceito dele é uma chave e um valor para essa chave, mas ele é o que aguenta mais carga de dados. Esses tipos de bancos de dados, são o que tem a maior escalabilidade. Berkeley DB Tokyo Cabinet Kyoto Cabinet Project Voldermort MemcacheDB SimpleBD Redis Riak
  • 8. Wide Column Store Fortemente inspirados pelo BigTable do Google eles suportam várias linhas e colunas, alem disso ele permite subcolunas. Alem do BigTable do google outros que usam essa tecnologia são: HBase(Apache) HiperTable Cassandra(Apache)
  • 9. Document Store Baseado em documentos XML ou JSON, podem ser localizados pelo seu id unico ou por qualquer registro que tenha no documento. CouchDB(Apache) MongoDB RavenDB
  • 10. Graph Store Com uma complexibilidade maior esses bancos de dados guardam objetos e não registros como os outros tipos de NoSQL. A busca destes itens são feitas pela navegação destes objetos. Titan Neo4J InfoGrid HyperGraphDB
  • 11. Column Oriented Store Esses são bancos de dados relacionais, porem eles tem caracteristicas do NoSQL a principal diferença deles é que os dados são armazenados em colunas, ajudando na escalabilidade. Vertica MonetDB LucidDB Infobright Ingres/Vectorwise
  • 12.
  • 13. Cases Reais Um case real interessante é da Netflix que utiliza 3 bancos NoSQL: SimpleDB, HBase e Cassandra. http://techblog.netflix.com/2011/01/nosql-at-netflix.html
  • 14. Cases Reais Para o MongoDB que será nosso banco de estudo temos as seguintes empresas utilizando-o em produção: ● SAP ● Craigslist ● Shutterfly ● foursquare ● bit.ly ● SourceForge ● Disney
  • 15. Cases Reais ● MTV Networks ● GitHub ● Justin.tv ● CollegeHumor ● SugarCRM ● GrooveShark ● CartolaFC http://www.mongodb.org/display/DOCS/Use+Cases
  • 16. MongoDB ● C++ ● JSON/BSON ● Replica ● Sharding ● GridFS ● Map/Reduce
  • 17. MongoDB - Instalação ● Mac ● Linux ● Windows
  • 18. MongoDB - Terminologia SQL RDBMS MongoDB DATABASE DATABASE TABLE COLLECTION ROWS JSON QUERY DOCUMENT INDEX QUERY PARTITION INDEXSHARD
  • 19. MongoDB - Coleção use minha_database show dbs db.nome_da_collection.comando() Ex.: db.nome_da_collection.drop() //apaga coleção db.nome_da_collection.remove() //limpa coleção
  • 20. MongoDB - Inserção prof1 = {"nome": "Jean Carlo Nascimento", "apelido": "suissa", "idade": 27, "disciplinas": ["MongoDB", "PHP"]}; db.professores.insert(prof1) prof2 = {"nome": "Wesley William", "apelido": "wesley", "idade": 25, "disciplinas": ["PHP"]}; db.professores.insert(prof2) // lembrando que o JSON valido necessita de aspas no nome do campo
  • 21. MongoDB - Consulta db.colecao.find({clausulas, campos}) Ex.: select * from professores where apelido = "suissa" db.professores.find( { apelido : "suissa" } ); select * from professores where nome LIKE "Jean*" db.professores.find( { nome : /Jean*/i } ); db.professores.find( { nome : { $regex : 'Jean*'} } ); select nome, idade from professores db.professores.find(null, {nome:1, idade:1} ) select nome, idade from professores where apelido = "suissa" db.professores.find( { apelido : "suissa" }, { nome:1, idade:1 } );
  • 22. MongoDB - Operadores $lt - menor que < $lte - menor ou igual que <= $gt - maior que > $gte - maior ou igual que >=
  • 23. MongoDB - Operadores $all - retorna o objeto onde todos os valores foram encontrados $exists - retorna o objeto caso uma chave existe $or - retorna o objeto caso a cláusula OU for verdadeira $and - retorna o objeto caso a cláusula E for verdadeira $type - retorna o objeto caso a chave seja do tipo especificado para conferir a lista dos tipos e seus valores acesse: Lista dos tipos e seus valores
  • 24. MongoDB - Operadores $ne- retorna o objeto onde o valor não foi encontrado $in- retorna o objeto se o valor foi encontrado $nin- retorna o objeto se nenhum dos valores foi encontrado $nor- retorna o objeto caso a cláusula negação do OU for verdadeira $mod - retorna o objeto quando o módulo de um valor foi encontrado
  • 25. MongoDB - Count select count(*) from professores db.professores.count() select count(*) from professores where idade > 30 db.professores.count({idade:{$lt: 30}})
  • 26. MongoDB - Ordenação select * from professores order by nome ASC db.professores.find().sort({nome:1}) select * from professores order by idade DESC db.professores.find().sort({idade:-1})
  • 27. MongoDB - Limit select * from professores order by nome ASC limit 0,2 db.professores.find().sort({nome:1}).limit(2) select * from professores limit 2 offset 10 db.professores.find().limit(2).skip(10)
  • 28. MongoDB - Alteração professor = db.professores.findOne( { name : "Jean" } ); professor.idade = 28; db.professores.save(professor); //lembrando que o findOne retorna apenas um registro //pois o find mesmo retornando um registro retornará dentro de um cursor
  • 29. MongoDB - Exclusão db.professores.remove(); // exclui tudo db.things.remove({nome: "Jean"}); // exclui todos os registro com nome = Jean
  • 30. MongoDB - Índices Para criarmos um índice usamos o ensureIndex(). db.professores.ensureIndex({ email:1 }); Para pegarmos todos os índices da nossa collection professores usamos getIndexes(). db.professores.getIndexes() Para pegar todos os índices da database usamos o find() em uma collection do sistema. db.system.indexes.find()
  • 31. Sharding - O que é Sharding é a divisão da informação em partes iguais e divididas entre os nós.
  • 32. Sharding - Como funciona O MondoDB ira dividir nossas informações através dos servidores de sharding setados em sua configuração, levando em conta a shard key.
  • 33. Sharding - Configurando Primeiramente precisamos criar os serviços de sharding. Esse exemplo é apenas didático e será rodado em apenas um servidor. mkdir /data/db/a /data/db/b mongod --shardsvr --dbpath /data/db/a --port 10000 > /tmp/sharda.log & cat /tmp/sharda.log mongod --shardsvr --dbpath /data/db/b --port 10001 > /tmp/shardb.log & cat /tmp/shardb.log Obs.: O cat serve apenas para verificarmos se o serviço subiu realmente e o & serve para rodar em background.
  • 34. Sharding - Configurando Vamos configurar os servidores. mkdir /data/db/config mongod --configsvr --dbpath /data/db/config --port 20000 > /tmp/configdb.log & cat /tmp/configdb.log mongos --configdb localhost:20000 > /tmp/mongos.log & cat /tmp/mongos.log
  • 35. Sharding - Configurando Precisamos dizer qual database, collection e nossa shard key. db.runCommand( { enablesharding : "test" } ) {"ok" : 1} db.runCommand( { shardcollection : "test.people", key : {name : 1} } ) { "collectionsharded" : "test.people", "ok" : 1 }
  • 37. MongoDB - GridFS GridFS é o sistema de arquivos do MongoDb e deve ser usado quando precisamos armazenar arquivos maiores que 1Mb. mongofiles -d myfiles put my_music.mp3 connected to: 127.0.0.1 added file: { _id: ObjectId('4ce9ddcb45d74ecaa7f5a029'), filename: "my_music.mp3", chunkSize: 262144, uploadDate: new Date(1290395084166), md5: "7872291d4e67ae8b8bf7aea489ab52c1", length: 1419631 }
  • 38. MongoDB - GridFS - inserindo $conn = new Mongo("127.0.0.1:27017"); // Connect $db = $conn->uniform_server; // Select DB $db->authenticate("user","password"); // Authenticate to MongoDB $grid = $db->getGridFS(); // Initialize GridFS $name = $_FILES['Filedata']['name']; // Get Uploaded file name $type = $_FILES['Filedata']['type']; // Try to get file extension $id = $grid->storeUpload('Filedata',$name); // Store uploaded file to GridFS
  • 39. MongoDB - GridFS - inserindo Mais exemplos em: http://blog.hardkap.com/index.php/posts/00069/MongoDB---GridFS
  • 40. MongoDB - GridFS - listando $conn = new Mongo("127.0.0.1:27017"); // Connect $db = $conn->uniform_server; // Select DB $db->authenticate("user","password"); // Authenticate to MongoDB $grid = $db->getGridFS(); // Initialize GridFS $cursor = $grid->find(); foreach ($cursor as $obj) { // iterate through the results echo 'Filename: '.$obj->getFilename().' Size: '.$obj->getSize().'<br/>'; } $conn->close(); // Disconnect from Server exit(0);
  • 41. MongoDB - DBRef DBRef é o esquema nativo de referencia interna entre os documentos. O driver do PHP executará a query no objeto desejada, trazendo os objetos referenciados via DBRef diretamente.
  • 42. MongoDB - DBRef DBRefs possui os seguintes campos: $ref: nome da collection referenciada. $id: valor do _id do documento referenciado. $db: opcional e contém o nome da database onde o documento esta referenciado. *Apenas alguns drivers possuem suporte. Um documento DBRef pode ser exemplificado assim: { $ref : <value>, $id : <value>, $db : <value> } new DBRef ( 'customers' , ObjectId("4ef4a61a90eec3e3c748263c") )
  • 43. MongoDB - DBRef Inserir esses registros: db.fruit.save ({"_id" : "1" , "name" : "apple"}); db.fruit.save ({"_id" : "2" , "name" : "grape"}); db.fruit.save ({"_id" : "3" , "name" : "orange"}); db.fruit.save ({"_id" : "4" , "name" : "pineapple"}); db.basket.save ({"_id" : "1", "items" : [ {"quantity" : 5 , item : {"$ref" : "fruit", "$id" : "1"}}, {"quantity" : 10, item : {"$ref" : "fruit", "$id" : "3"}} ]}) db.basket.find ()
  • 44. MongoDB - Admin UIs Sistemas para administração visual são uma mão na roda para qualquer Banco de dados, como o largamente usado phpmyadmin, para o Mysql. Não seria diferente para o MongoDB, existem diversos sistemas desses nas mais variadas linguagens, uma boa listagem se encontra em http://www.mongodb.org/display/DOCS/Admin+UIs AdminUIs para PHP: PhpMoAdmin - http://www.phpmoadmin.com/ RockMongo - http://code.google.com/p/rock-php/wiki/rock_mongo
  • 46. MongoDB - RockMongo http://rockmongo.com/ Para se logar use login e senha: admin.
  • 47. MongoDB - RockMongo http://rockmongo.com/ Para se logar use login e senha: admin.
  • 48. MongoDB - Frameworks Vários frameworks e CMS de PHP já possuem um biblioteca para trabalhar com o MongoDB, dentre eles posso listar: CakePHP: https://github.com/ichikaway/cakephp-mongodb Codeigniter: https://github.com/kyledye/MongoDB-CodeIgniter-Driver FatFree http://fatfree.sourceforge.net/page/data-mappers Kohana https://github.com/Wouterrr/mangodb Lithium http://lithify.me/docs/lithium/data/source/MongoDb
  • 49. MongoDB - Frameworks Symfony 2 : http://code.google.com/p/mongodbloganalyzer/ http://www.symfony-project.org/plugins/sfStoragePerformancePlugin https://github.com/brtriver/sfMongoSessionStorage Yii http://canni.github.com/YiiMongoDbSuite/ Zend Framework https://github.com/coen-hyde/Shanty-Mongo https://github.com/stunti/Stunti_Cache_Backend_Mongo http://framework.zend.com/wiki/display/ZFPROP/Zend_Nosql_Mongo+-+Valentin+Golev Drupal: http://drupal.org/project/mongodb
  • 50. MongoDB - Hosts Existem alguns serviços onde você pode hospedar bancos MongoDB: MongoHQ - https://mongohq.com/ HostedMongo - http://hostedmongo.com/ MongoLab - https://mongolab.com/home/ MongoGrid - http://nodegrid.com/resources/mongogrid/
  • 51. Map/Reduce O map/reduce foi um framework desenvolvido pelo Google para iterar em grandes coleções de dados paralelamente. Baseado nas funções de map e reduce da programação funcional. A ideia é mapear seus dados através de suas coleções e depois reduzir esses dados em uma informação. db.collection.mapReduce(mapfunction,reducefunction[,options]); m = function() { emit(this.user_id, 1); r = function(k,vals) { return 1; } res = db.posts.mapReduce(m, r, { query : {tag:'php'} }); db[res.result].find()
  • 52. Map/Reduce //map function() { emit( this.username, {count: 1, likes: this.likes} ); } //reduce function(key, values) { var result = {count: 0, likes: 0}; values.forEach(function(value) { result.count += value.count; result.likes += value.likes; }); return result; }
  • 53. Map/Reduce Fazer o exemplo 2: http://www.mongodb.org/display/DOCS/MapReduce
  • 55. MongoDB - Conexão $conexao = new Mongo(); $db = $conexao->$nome_banco; $collection = $db->$nome_collection;
  • 56. MongoDB - Exemplos PHP INSERT INTO USERS VALUES(1,1) $db->users->insert(array("a" => 1, "b" => 1)); SELECT a,b FROM users $db->users->find(array(), array("a" => 1, "b" => 1)); SELECT * FROM users WHERE age=33 $db->users->find(array("age" => 33)); SELECT a,b FROM users WHERE age=33 $db->users->find(array("age" => 33), array("a" => 1, "b" => 1)); SELECT a,b FROM users WHERE age=33 $db->users->find(array("age" => 33), array("a" => 1, "b" => 1)); SELECT a,b FROM users WHERE age=33 ORDER BY name $db->users->find(array("age" => 33), array("a" => 1, "b" => 1))->sort(array("name" => 1));
  • 57. MongoDB - Exemplos PHP SELECT * FROM users WHERE age>33 $db->users->find(array("age" => array('$gt' => 33))); SELECT * FROM users WHERE age<33 <br />$db->users->find(array("age" => array ('$lt' => 33))); SELECT * FROM users WHERE name LIKE "%Joe%" $db->users->find(array("name" => new MongoRegex("/Joe/"))); SELECT * FROM users WHERE name LIKE "Joe%" $db->users->find(array("name" => new MongoRegex("/^Joe/"))); SELECT * FROM users WHERE age>33 AND age<=40 $db->users->find(array("age" => array('$gt' => 33, '$lte' => 40)));
  • 58. MongoDB - Exemplos PHP SELECT * FROM users ORDER BY name DESC $db->users->find()->sort(array("name" => -1)); CREATE INDEX myindexname ON users(name) $db->users->ensureIndex(array("name" => 1)); CREATE INDEX myindexname ON users(name,ts DESC) $db->users->ensureIndex(array("name" => 1, "ts" => -1)); SELECT * FROM users WHERE a=1 and b='q' $db->users->find(array("a" => 1, "b" => "q")); SELECT * FROM users LIMIT 10 SKIP 20 $db->users->find()->limit(10)->skip(20); SELECT * FROM users WHERE a=1 or b=2 $db->users->find(array('$or' => array(array("a" => 1), array("b" => 2))));
  • 59. MongoDB - Exemplos PHP SELECT * FROM users LIMIT 1 $db->users->find()->limit(1); EXPLAIN SELECT * FROM users WHERE z=3 $db->users->find(array("z" => 3))->explain() SELECT DISTINCT last_name FROM users $db->command(array("distinct" => "users", "key" => "last_name")); SELECT COUNT(*) FROM users $db->users->count(); SELECT COUNT(*) FROM users where AGE > 30 $db->users->find(array("age" => array('$gt' => 30)))->count();
  • 60. MongoDB - Exemplos PHP SELECT COUNT(AGE) from users $db->users->find(array("age" => array('$exists' => true)))->count(); UPDATE users SET a=1 WHERE b='q' $db->users->update(array("b" => "q"), array('$set' => array("a" => 1))); UPDATE users SET a=a+2 WHERE b='q' $db->users->update(array("b" => "q"), array('$inc => array("a" => 2))); DELETE FROM users WHERE z="abc" $db->users->remove(array("z" => "abc"));