SlideShare ist ein Scribd-Unternehmen logo
1 von 61
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to Node JS.pdf
Introduction to Node JS.pdfIntroduction to Node JS.pdf
Introduction to Node JS.pdfBareen Shaikh
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and DjangoMichael Pirnat
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Expressjguerrero999
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBMongoDB
 
Entity Framework Core
Entity Framework CoreEntity Framework Core
Entity Framework CoreKiran Shahi
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsSpringPeople
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBNodeXperts
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring DataAnton Sulzhenko
 
Asp.Net Core MVC with Entity Framework
Asp.Net Core MVC with Entity FrameworkAsp.Net Core MVC with Entity Framework
Asp.Net Core MVC with Entity FrameworkShravan A
 
Cross-domain requests with CORS
Cross-domain requests with CORSCross-domain requests with CORS
Cross-domain requests with CORSVladimir Dzhuvinov
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineJason Terpko
 
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management SystemsAEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management SystemsMongoDB
 
Angular - Chapter 5 - Directives
 Angular - Chapter 5 - Directives Angular - Chapter 5 - Directives
Angular - Chapter 5 - DirectivesWebStackAcademy
 
Rest and Sling Resolution
Rest and Sling ResolutionRest and Sling Resolution
Rest and Sling ResolutionDEEPAK KHETAWAT
 
Introduction to SASS
Introduction to SASSIntroduction to SASS
Introduction to SASSJon Dean
 

Was ist angesagt? (20)

Introduction to Node JS.pdf
Introduction to Node JS.pdfIntroduction to Node JS.pdf
Introduction to Node JS.pdf
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
 
Node Architecture and Getting Started with Express
Node Architecture and Getting Started with ExpressNode Architecture and Getting Started with Express
Node Architecture and Getting Started with Express
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Blazor
BlazorBlazor
Blazor
 
Entity Framework Core
Entity Framework CoreEntity Framework Core
Entity Framework Core
 
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorialsMongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
Mongo DB: Fundamentals & Basics/ An Overview of MongoDB/ Mongo DB tutorials
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
MongoDB + Java + Spring Data
MongoDB + Java + Spring DataMongoDB + Java + Spring Data
MongoDB + Java + Spring Data
 
Asp.Net Core MVC with Entity Framework
Asp.Net Core MVC with Entity FrameworkAsp.Net Core MVC with Entity Framework
Asp.Net Core MVC with Entity Framework
 
Cross-domain requests with CORS
Cross-domain requests with CORSCross-domain requests with CORS
Cross-domain requests with CORS
 
Hibernate tutorial
Hibernate tutorialHibernate tutorial
Hibernate tutorial
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation Pipeline
 
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management SystemsAEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
AEM + MongoDB: How to Scale and Operate Large Digital Asset Management Systems
 
Soap vs rest
Soap vs restSoap vs rest
Soap vs rest
 
Angular - Chapter 5 - Directives
 Angular - Chapter 5 - Directives Angular - Chapter 5 - Directives
Angular - Chapter 5 - Directives
 
Asp.net caching
Asp.net cachingAsp.net caching
Asp.net caching
 
Rest and Sling Resolution
Rest and Sling ResolutionRest and Sling Resolution
Rest and Sling Resolution
 
Introduction to SASS
Introduction to SASSIntroduction to SASS
Introduction to SASS
 

Ähnlich wie 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
 
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
 

Ähnlich wie 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
 
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
 
Implementação de
Implementação de Implementação de
Implementação de
 

Mehr von 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
 

Mehr von 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"));