Está en la página 1de 30

MONGODB & PHP

Yohan Sebastian Aristizabal Murillo


Estudiante de Ingeniería en Sistemas y Computación
Universidad de Caldas
¿CUÁL ES EL CONTENIDO?

 ¿Qué es una base de datos NoSQL?


 Descripción general de MongoDB

 Configuración e instalación de MongoDB + PHP


en Linux
 Manipulación de MongoDB desde PHP
¿QUÉ ES UNA BASE DE DATOS NOSQL?
Las bases de datos NoSQL son sistemas de almacenamiento de
información que no cumplen con el esquema entidad-relación.

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 información en otros formatos
como clave-valor, Mapeo de Columnas, Documentos o Grafos.

La principal característica de las bases de datos NoSQL es que están


pensadas para manipular enormes cantidades de información de
manera muy rápida. Están preparadas para escalar horizontalmente sin
perder rendimiento.
CLASIFICACIÓN DE LAS BD NOSQL

Se clasifican según su fuente de datos:

 Clave-valor: Redis
 Mapeo de Columnas:Hbase

 Documentos: MongoDB

 Grafos: Neo4j
DESCRIPCIÓN GENERAL DE MONGODB

MongoDB es una solución escalable y de alto


rendimiento, es una base de datos de código
abierto, escrita en C++.
Sus características principales son:
 Orientada a documentos(almacenamiento
BSON).
 arrays y documentos anidados

 Índices para realizar consultas mas rápidas


¿QUÉ ES MONGODB?

 Orientada a documentos
¿QUÉ ES MONGODB?

 Las colecciones son básicamente ¨bolsas de


documentos¨, o bolsas de objetos JSON

 Diferentes campos
 Diferentes tamaños

 Indexables
INSTALACIÓN MONGODB
 Descargar la versión 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 versión:


$ 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
INSTALACIÓN 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 CONEXIÓN
<?php
//conecta a localhost:27017
$connection = new Mongo();

//conecta a un host remoto (puerto por omisión: 27017)


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

// conecta a un host remoto en el puerto facilitado


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

Conexión persistente

<?php
$connection = new Mongo("localhost:27017", array("persist" => "x"));
?>
¿CÓMO 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 colección cartoons es creada

 Se crea un índice en el campo _id

 Se crean y se adiciona un _id para cada


documento
DOCUMENTOS MÁS COMPLEJOS
 Representación en JSON

{
'_id‘:'aristi',
'name‘:'Sebastian Aristizabal‘,
'friends': ['Pablo', 'Yeny'],
'followers‘:18,
'contact‘:{'twitter'=>'@arystyzabal',
'email'=>'sebaris@gmail.com'}
}
DOCUMENTOS MÁS COMPLEJOS
 Representación 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 básica
$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 );

 También 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 ));
ACTUALIZACIÓN DE DOCUMENTOS
 Consultas + comandos de actualización
//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);
ACTUALIZACIÓN 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 INFORMACIÓN SOBRE ACTUALIZACIONES

 Otros operadores existentes son: $pop, $pull,


$addToSet, $rename.

 Los operadores son atómicos con los


documentos.

 Solo se puede llevar a cabo una operación 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 opción

$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
 Representación en JSON
{
"_id" : ObjectId("4f8c8e1371cbc84715000002"),
"activeUser" : {
"$ref" : "user",
"$id" : ObjectId("4f8c8c3671cbc84c15000000")
},
"publishingDate" : "2012-04-16 16:24:35",
"activatingElement" : "follow",
"privacyLevel" : "public "
}
¿CÓMO 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 colección


$collection->remove();

 Borrar un documento de la colección


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

También podría gustarte