Класс MongoId

(PECL mongo >=0.8.0)

Внимание

Расширение, задающее этот класс, объявлено устаревшим. Вместо него используйте расширение MongoDB. Есть такие альтернативы:

Введение

Уникальный идентификатор, созданный для объектов базы данных. При добавлении записи в базу данных без поля _id, такое поле будет автоматически добавлено и инициализировано объектом MongoId. Если хранимые записи предположительно и так будут содержать уникальные поля, (такие как имя пользователя или отметку времени), возможно использовать их вместо поля _id , и это не будет изменено MongoId.

Экземпляры класса MongoId выполняют роль автоинкремента реляционных базах данных: обеспечивает кортеж уникальным ключом в случае отсутствия такового. Однако автоинкремент не очень хорошо работает с секционированными (sharded) базами данных, так как в таком случае невозможно обеспечить быстрый поиск следующего инкремента. Данный класс удовлетворяет требованиям к быстрой генерации значения, уникального в пределах секции.

Каждый MongoId состоит из 12 байт (преобразующихся в 24 шестнадцатеричных символа). Первые 4 байта занимает отметка времени, следующие 3 хеш имени хоста клиента, следующие 2 - последние 2 значащих байта идентификатора процесса исполнения скрипта, и последние 3 байта - автоинкрементное значение.

Объекты MongoIdмогуть быть сериализованы и десериализованы. Пример сериализованного значения:

C:7:"MongoId":24:{4af9f23d8ead0e1d32000000}

Обзор классов

MongoId {
public string $$id = NULL ;
/* Методы */
public __construct ([ string|MongoId $id = NULL ] )
public static getHostname ( void ) : string
public getInc ( void ) : int
public getPID ( void ) : int
public getTimestamp ( void ) : int
public static isValid ( mixed $value ) : bool
public static __set_state ( array $props ) : MongoId
public __toString ( void ) : string
}

Поля

id
Поле содержит строчное представление объекта.

Замечание: Имя свойства начинается с символа $. К нему можно обратиться используя сложный синтаксис разбора переменных (т.е. $mongoId->{'$id'}).

Смотрите также

Документация MongoDB об » идентификаторах.

Содержание

  • MongoId::__construct — Создает новый идентификатор
  • MongoId::getHostname — Получает имя хоста, используемое для идентификаторов этой машины
  • MongoId::getInc — Получает увеличенное значение для создания этого идентификатора
  • MongoId::getPID — Получает идентификатор процесса
  • MongoId::getTimestamp — Получает количество секунд с момента создания этого идентификатора
  • MongoId::isValid — Проверяет, является ли значение корректным ObjectId
  • MongoId::__set_state — Создает фиктивный MongoId
  • MongoId::__toString — Возвращает шестнадцатеричное представление этого идентификатора
add a note add a note

User Contributed Notes 7 notes

up
8
Lionel
6 years ago
Just to be careful with the strict comparison. Object inequalities holds.

<?php

$m1
= new MongoId('51b14c2de8e185801f000006');
$m2 = new MongoId('51b14c2de8e185801f000006');

var_dump($m1 === $m2); //gives you boolean false
var_dump($m1 == $m2); //gives you boolean true

$m3 = new MongoId('51b14c2de8e185801f000006');
$m4 = new MongoId('51b14c2de8e185801f000007');

var_dump($m3 === $m4); //gives you boolean false
var_dump($m3 == $m4); //gives you boolean false

?>
up
7
rmarscher
7 years ago
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;
?>
up
5
georgedot dont spam me gmail caom
6 years ago
Due to Recent changes.

* [PHP-554] - MongoId should not get constructed when passing in an invalid ID.

Constructor will throw an exception when passing invalid ID.

<?php

$_id
= new MongoId(); //Generates new ID
$_id = new MongoId(null); //Generates new ID

$_id = new MongoId("invalid id"); //throws MongoException

?>

<?php
//Revert to old behaviour
$_id = "invalid id";
try {
   
$_id = new MongoId($_id);
} catch (
MongoException $ex) {
   
$_id = new MongoId();
}
?>

<?php
//Nifty hack
class SafeMongoId extends MongoId {

    public function
__construct($id=null) {

        try {
           
parent::__construct($id);
        } catch (
MongoException $ex) {
           
parent::__construct(null);
        }

    }
}
?>
up
2
Ryan S
6 years ago
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);
        }
    }
?>
up
2
lensvil dot co at gmail dot com
3 years ago
Get ObjectId MongoDB via PHP

var_dump($object);

object(MongoDB\Model\BSONDocument)#36 (1) {
  ["storage":"ArrayObject":private]=>
  array(8) {
    ["_id"]=>
    object(MongoDB\BSON\ObjectID)#33 (1) {
      ["oid"]=>
      string(24) "573e69e78fccd968aa066611"
    }
    ["dummy"]=>
    string(5) "mongo"
  }
}

Failure
var_dump($object->_id->oid);
>>> null

var_dump($object->_id->{'oid'});
>>> null

var_dump($object->_id->{'$oid'});
>>> null

Success
$bson = \MongoDB\BSON\fromPHP($object);
$json = \MongoDB\BSON\toJSON($bson);
$result = json_decode($json, true);

var_dump($result['_id']['$oid']);
>>> string(24) "573e69e78fccd968aa066611"
exit;
up
2
sararschreiber at gmail dot com
9 years ago
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();

?>
up
2
alex dot turpin at gmail dot com
8 years ago
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
?>
To Top