Класс MongoId

(PECL mongo >=0.8.0)

Введение

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

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

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

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

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

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

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

Поля

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

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

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

Содержание

Коментарии

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();

?>
2010-10-12 15:23:25
http://php5.kiev.ua/manual/ru/class.mongoid.html
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
?>
2011-07-11 12:15:34
http://php5.kiev.ua/manual/ru/class.mongoid.html
Автор:
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;
?>
2012-10-12 18:11:16
http://php5.kiev.ua/manual/ru/class.mongoid.html
Автор:
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);
        }
    }
?>
2012-12-05 19:46:53
http://php5.kiev.ua/manual/ru/class.mongoid.html
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);
        }

    }
}
?>
2013-07-03 10:29:43
http://php5.kiev.ua/manual/ru/class.mongoid.html
Автор:
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

?>
2013-07-08 04:51:36
http://php5.kiev.ua/manual/ru/class.mongoid.html
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;
2016-05-20 11:10:14
http://php5.kiev.ua/manual/ru/class.mongoid.html

    Поддержать сайт на родительском проекте КГБ