adrianalonso.es
web developer
Un índice en bbdd se trata de una estructura de datos que toma campos particulares de una tabla y almacena una estructura de rápido acceso a éstos datos con el objetivo de realizar consultas por el campo indexado mejorando el rendimiento y la velocidad de respuestas hacia estos. Son útiles emplearlos cuando nuestra base de datos crece significativamente.
{
loc:[-3.5234,40.434]
}Los índices 2d esféricos son índices algo más complejos que soportan consultas de cálculo geométricas en una esfera similar a nusetro planeta, de tal manera que soportan objetos de tipo Point, LineString y Polygon.
<?php
namespace MIW\DataAccessBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/** @MongoDB\EmbeddedDocument
*/
class Coordinates
{
/** @MongoDB\Float */
public $x;
/** @MongoDB\Float */
public $y;
public function getX() {
return $this->x;
}
public function getY() {
return $this->y;
}
public function setX($x) {
$this->x = $x;
}
public function setY($y) {
$this->y = $y;
}
}
<?php
namespace MIW\DataAccessBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/** @MongoDB\EmbeddedDocument
@MongoDB\Index(keys={"coordinates"="2d"}) */
class Address
{
/**
* @MongoDB\String
*/
protected $address;
/** @MongoDB\EmbedOne(targetDocument="Coordinates") */
public $coordinates
}Realizar una búsqueda por proximidad
O lo que es lo mismo:
return $this->createQueryBuilder()
->field('address.coordinates')->near($lat,$long)
->getQuery()
->execute();
db.runCommand( { geoNear: 'addres.coordinates', near: [$lat,$long])} );Gracias a MongoDB podemos obtener un valor añadido a nuestra base de datos de una forma bastante sencilla. Eso si, esto es una solución para problemas concretos y reducidos. Si se requieren operaciones más complejas en las que se requieran empleo de distancias, rutas se requerirán sistemas más complejos como los sistemas GIS comentados al inicio del artículo o emplear librerías que nos de esta potencia como es Google Maps.
http://adrianalonso.es/2014/08/indices-geoespaciales-con-mongodb/