You can also cast the id to a string rather than access the $id property to get a string representation of the MongoId.
<?php
$stringId = (string) $mongoId;
?>
Clase MongoId
(PECL mongo >=0.8.0)
Introducción
Identificador único creado para objetos de bases de datos. Se se inserta un objeto sin un campo _id en una base de datos , éste se añadirá con una instancia de MongoId. Si los datos tuvieran un campo único natural (como p.ej., un nombre de usuario o una fecha) no habría problema en usarlo como _id, y en este caso no se reemplazaría por un MongoId.
Las instancias de MongoId cumplen la función de los campos autoincrementales de las base de datos relacionales: ofrecen una clave única cuando los datos no tienen una clave natural. Los autoincrementales no funcionan correctamente en bases de datos compartidas, ya que es imposible averiguar rápidamente cuál será el siguiente número. Esta clase establece las limitaciones necesarias para generar rápidamente un valor único entre servidores compartidos.
Cada MongoId contiene 12 bytes (componiendo un string de 24 caracteres hexadecimales). Los cuatro primeros bytes son un timestamp, los tres siguientes son un hash del nombre de máquina del cliente, los dos siguiente son los bytes menos significativos del id del proceso en ejecución del script, y los últimos tres corresponden a un valor incremental.
MongoId es serializable y deserializable. Su forma serializada es similar a su forma en string:
C:7:"MongoId":24:{4af9f23d8ead0e1d32000000}
Sinopsis de la Clase
Campos
- id
- Este campo contiene la respresentación string de este objeto.
Ver también
Documentación de MongoDB sobre » ids.
Tabla de contenidos
- MongoId::__construct — Crea un nuevo id
- MongoId::getHostname — Obtiene el nombre de host que se usa para el id de esta máquina
- MongoId::getInc — Obtiene el valor incremental usado para crear este id
- MongoId::getPID — Obtiene el ID del proceso
- MongoId::getTimestamp — Devuelve el número de segundos desde la fecha de referencia con el que se creó este id
- MongoId::__set_state — Create a dummy MongoId
- MongoId::__toString — Devuelve la representación hexadecimal de este id
If you need to get the actual ID string, and you try the usual way, PHP will whine because it starts with a dollar sign and it thinks it's a variable. Instead, use this notation:
<?php
$mongoid->{'$id'} //Get the $id property of a MongoId object
?>
it is important to note that
<?php
array("_id" => new MongoId("50cf7d2841d41f4f35000000"))
// ≠
array("_id" => array("$id" => "50cf7d2841d41f4f35000000"))
?>
This issue can arrise when using json_encode() and json_decode(). If not paying close enough attention one can assume due to the encoded value of the object that it is just this simple:
<?php
$item = $db->myCollection->findOne();
print json_encode($item);
// {"_id": {"$id": "50cf7d2841d41f4f35000000"}}
$item = $db->myCollection->findOne(json_encode($item));
// $item is empty aka not found
?>
Simple solution to handle these situations:
<?php
class MongoId2 extends MongoId {
public function __construct($id = null) {
if(is_array($id)) {
$id = (object) $id;
}
if(is_object($id) && isset($id->{'$id'})) {
$id = $id->{'$id'};
}
return parent::__construct($id);
}
}
?>
this is useful for querying for an object by id, given the id's hex:
<?php
$userid = '4cb4ab6d7addf98506010000';
$theObjId = new MongoId($userid);
$connection = new Mongo();
$db = $connection->thedb->users;
// this will return our matching entry.
$item = $db->findOne(array("_id" => $theObjId));
$connection->close();
?>
