Está en la página 1de 30

MONGODB & PHP

Yohan Sebastian Aristizabal Murillo


Estudiante de Ingeniera en Sistemas y Computacin
Universidad de Caldas
CUL ES EL CONTENIDO?

Qu es una base de datos NoSQL?


Descripcin general de MongoDB

Configuracin e instalacin de MongoDB + PHP


en Linux
Manipulacin de MongoDB desde PHP
QU ES UNA BASE DE DATOS NOSQL?
Las bases de datos NoSQL son sistemas de almacenamiento de
informacin que no cumplen con el esquema entidad-relacin.

Mientras que las bases de datos relacionales basan su funcionamiento


en tablas, joins y transacciones ACID, las bases de datos NoSQL no
imponen una estructura de datos en forma de tablas y relaciones entre
ellas, ya que suelen permitir almacenar informacin en otros formatos
como clave-valor, Mapeo de Columnas, Documentos o Grafos.

La principal caracterstica de las bases de datos NoSQL es que estn


pensadas para manipular enormes cantidades de informacin de
manera muy rpida. Estn preparadas para escalar horizontalmente sin
perder rendimiento.
CLASIFICACIN DE LAS BD NOSQL

Se clasifican segn su fuente de datos:

Clave-valor: Redis
Mapeo de Columnas:Hbase

Documentos: MongoDB

Grafos: Neo4j
DESCRIPCIN GENERAL DE MONGODB

MongoDB es una solucin escalable y de alto


rendimiento, es una base de datos de cdigo
abierto, escrita en C++.
Sus caractersticas principales son:
Orientada a documentos(almacenamiento
BSON).
arrays y documentos anidados

ndices para realizar consultas mas rpidas


QU ES MONGODB?

Orientada a documentos
QU ES MONGODB?

Las colecciones son bsicamente bolsas de


documentos, o bolsas de objetos JSON

Diferentes campos
Diferentes tamaos

Indexables
INSTALACIN MONGODB
Descargar la versin desde
http://www.mongodb.org/downloads

En Linux:
# creamos un directorio por defecto para los datos
$ sudo mkdir -p /data/db

# usamos curl, para obtener la ultima versin:


$ curl -O http://downloads.mongodb.org/linux/mongodb-linux-i686-
latest.tgz

# desempaquetamos en el directorio deseado y listo.


$ tar xzf mongodb-linux-i686-latest.tgz
INSTALACIN MONGODB

Instalar PHP Driver:


$ sudo apt-get install php5-dev php5-cli php-pear
$ sudo pecl install mongo

Abrir el archivo php.ini y adicionar:


extension=mongo.so
ESTABLECIENDO UNA CONEXIN
<?php
//conecta a localhost:27017
$connection = new Mongo();

//conecta a un host remoto (puerto por omisin: 27017)


$connection = new Mongo( "example.com" );

// conecta a un host remoto en el puerto facilitado


$connection = new Mongo( example.com:65432" );
?>

Conexin persistente

<?php
$connection = new Mongo("localhost:27017", array("persist" => "x"));
?>
CMO GUARDAMOS UN DOCUMENTO?
<?php
try{
$mongo= new Mongo("localhost:27017", array("persist" => "x"));
$db = $mongo->comedy;
$collection = $db->cartoons;

$obj = array( " title " => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($obj);

$obj = array( "title" => "XKCD", "online" => true );


$collection->insert($obj);

$cursor = $collection->find();
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
}
} catch (MongoCursorException $e) {
die("Query failed " . $e -> getMessage());
}
AL GUARDAR:

Cuando insertamos los documentos, sucede lo


siguiente:
La BD comedy es creada
La coleccin cartoons es creada

Se crea un ndice en el campo _id

Se crean y se adiciona un _id para cada


documento
DOCUMENTOS MS COMPLEJOS
Representacin en JSON

{
'_id:'aristi',
'name:'Sebastian Aristizabal,
'friends': ['Pablo', 'Yeny'],
'followers:18,
'contact:{'twitter'=>'@arystyzabal',
'email'=>'sebaris@gmail.com'}
}
DOCUMENTOS MS COMPLEJOS
Representacin en php

$doc = array ( '_id => 'aristi',


'name' => 'Sebastian Aristizabal',
'friends' => array ( 'Pablo , 'Yeny' ),
'followers => 18,
'contact => array ('twitter' => '@arystyzabal',
'email => 'sebaris@gmail.com
)
);
ALGUNAS CONSULTAS BASICAS
//Consulta bsica
$query=array( '_id' => 'aristi' );
$result=$collection->findOne($query);

//Consulta en array
$query=array( 'friends' => 'Pablo' );
$result=$collection->findOne($query);

//Consulta en documento anidado


$query=array( 'contact.twitter' => '@arystyzabal' );
$result=$collection->findOne($query);
ESPECIFICANDO CAMPOS

Las consultas se pueden llevar a cabo


especificando que campos quiero retornar.

$query = array( '_id' => 'aristi' );


$fields = array( '_id => 0, 'name => 1, 'friends => 1 );
$result = $collection -> findOne ( $query, $fields );
ALGUNAS CONSULTAS AVANZADAS
mayor que ($gt), menor que ($lt), mayor o igual que ($gte),
menor o igual que ($lte)

$query = array ( 'friends' => array ( '$gt' => 10 ) );


$result = $collection->find( $query );

IN ($in), no IN ($nin)

$query = array ( '_id' =>


array ( '$in' => array( 'aristi', 'ar' ) )
);
$result = $collection->find( $query );
ALGUNAS CONSULTAS AVANZADAS
$or y $and
$query = array ( '$or' => array (
array ( '_id' => 'aristi'),
array ( 'name' => 'Roberto')
));
$result = $collection->find( $query );

$ne
$query = array ( '_id' => array ( '$ne' => 'pepe'));
$result = $collection->find( $query );

Tambin soporta $exists. $mod, $type, $size


RESULTADOS DE LAS CONSULTAS
El resultado de un find() es un cursor
Los cursores se pueden manejar con foreach

$collection->insert( array ( 'x' => 1 ));


$collection->insert( array ( 'x' => 2 ));
$collection->insert( array ( 'x' => 3 ));

$results = $collection->find();
foreach ($results as $r) {
print_r($r);
}
RESULTADOS DE LAS CONSULTAS
Los cursores se pueden trabajar con un ciclo while

$collection->insert( array ( 'x' => 1 ));


$collection->insert( array ( 'x' => 2 ));
$collection->insert( array ( 'x' => 3 ));

$results = $collection->find();
while ( $results->hasNext()) {
$r = $results->getNext();
print_r($r);
}
FUNCIONES BASICAS SOBRE CURSORES

Los cursores se pueden contar, limitar, ordenar


$collection->insert( array ( 'x' => 1 ));
$collection->insert( array ( 'x' => 2 ));
$collection->insert( array ( 'x' => 3 ));

print($collection->find()->count()); //3
$res = $collection->find()->limit(1); // x=>1
$res2 = $collection->find()->skip(1)->limit(1); // x=>2
$res3 = $collection->find()->sort(array ( 'x' => 1 ));
ACTUALIZACIN DE DOCUMENTOS
Consultas + comandos de actualizacin
//Tiene un comportamiento inesperado
$query = array( '_id' => 'aristi');
$update = array( 'followers' => '19' );
$collection->update( $query, $update);

//pero si se realiza as
$query = array( '_id' => 'aristi');
$update = array( '$set' => array('followers' => '19' ));
$collection->update( $query, $update);
ACTUALIZACIN DE DOCUMENTOS
Otras operaciones

$query = array( '_id' => 'aristi');


$update = array(
'$set' => array('name' => 'Sebastian',
'contact.website' => 'http://sebas.com/'),
'$inc' => array( 'followers' => 1 ),
'$push' => array( 'friends' => 'Juan' ),
'$unset' => array( 'contact.twitter' => 1)
);
$collection->update( $query, $update);
MAS INFORMACIN SOBRE ACTUALIZACIONES

Otros operadores existentes son: $pop, $pull,


$addToSet, $rename.

Los operadores son atmicos con los


documentos.

Solo se puede llevar a cabo una operacin por


campo, es decir no se puede hacer $pop &
$pull a una array en un mismo comando
ACTUALIZACIONES MULTIPLES
Por defecto solo el primer documento es actualizado,
pero se puede cambiar solo agregando una opcin

$collection->insert( array ( 'x' => 1 ));


$collection->insert( array ( 'x' => 1 ));
$collection->insert( array ( 'x' => 3 ));

$query = array( x' => 1);


$update = array( '$inc' => array( 'x' => 1));
$option = array( 'multiple' => TRUE);
$collection->update( $query, $update, $option);
CREAR REFERENCIAS ENTRE DOCUMENTOS DE
DIFERENTES COLECCIONES
Representacin en JSON
{
"_id" : ObjectId("4f8c8e1371cbc84715000002"),
"activeUser" : {
"$ref" : "user",
"$id" : ObjectId("4f8c8c3671cbc84c15000000")
},
"publishingDate" : "2012-04-16 16:24:35",
"activatingElement" : "follow",
"privacyLevel" : "public "
}
CMO SE HACE EN PHP?
$collection = $db->user;
$query = array( name => Sebastian);
$user = $collection -> findOne ( $query);
$reference = $collection->createDBRef($user);

$collection = $db->activity;
$doc = array (
'_id' => new MongoId( '4f8c8e1371cbc84715000002 ' ),
'activeUser' => $reference,
'publishingDate' : '2012-04-16 16:24:35 ',
'activatingElement' : 'follow',
'privacyLevel' : 'public'
);
$collection->insert($doc);
CONSULTAR LOS DATOS DE UN DOCUMENTO
REFERENCIADO

$result = $collection->findOne(_id => new


MongoId('4f8c8e1371cbc84715000002 );

$resultReference = $db->getDBRef($result[activeUser])
BORRAR DOCUMENTOS

Borrar toda la coleccin


$collection->remove();

Borrar un documento de la coleccin


$query = array( x => 1 );
$collection->remove( $query );
Borra donde x=1

También podría gustarte