CakeFest 2024: The Official CakePHP Conference

MongoDB\BSON\Serializable::bsonSerialize

(mongodb >=1.0.0)

MongoDB\BSON\Serializable::bsonSerializeProvides an array or document to serialize as BSON

Descripción

abstract public MongoDB\BSON\Serializable::bsonSerialize(): array|stdClass|MongoDB\BSON\Document|MongoDB\BSON\PackedArray

Called during serialization of the object to BSON. The method must return an array, stdClass, MongoDB\BSON\Document, or MongoDB\BSON\PackedArray.

Root documents (e.g. a MongoDB\BSON\Serializable passed to MongoDB\BSON\fromPHP()) will always be serialized as a BSON document. For field values, associative arrays and stdClass instances will be serialized as a BSON document and sequential arrays (i.e. sequential, numeric indexes starting at 0) will be serialized as a BSON array.

Users are encouraged to include an _id property (e.g. a MongoDB\BSON\ObjectId initialized in your constructor) when returning data for a BSON root document; otherwise, the driver or database will need to generate a MongoDB\BSON\ObjectId when inserting or upserting the document, respectively.

Parámetros

Esta función no tiene parámetros.

Valores devueltos

An array, stdClass, MongoDB\BSON\Document, or MongoDB\BSON\PackedArray to be serialized as a BSON array or document.

Historial de cambios

Versión Descripción
PECL mongodb 1.17.0

The return type was changed from array|object. Instead of object, the return type now specifies stdClass. Classes that implement this interface must be changed to no longer declare an object return type. As the return type is tentative, a deprecation warning is emitted on PHP 8.1 and newer.

In addition to the changes above, the driver now also supports returning instances of MongoDB\BSON\Document and MongoDB\BSON\PackedArray. Please note that any MongoDB\BSON\PackedArray instances returned are silently converted to objects when stored as root documents. They are stored as arrays when used as an embedded field value.

Ejemplos

Ejemplo #1 MongoDB\BSON\Serializable::bsonSerialize() returning an associative array for root document

<?php

class MyDocument implements MongoDB\BSON\Serializable
{
private
$id;

function
__construct()
{
$this->id = new MongoDB\BSON\ObjectId;
}

function
bsonSerialize(): array
{
return [
'_id' => $this->id, 'foo' => 'bar'];
}
}

$bson = MongoDB\BSON\fromPHP(new MyDocument);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

El resultado del ejemplo sería algo similar a:

{ "_id" : { "$oid" : "56cccdcada14d8755a58c591" }, "foo" : "bar" }

Ejemplo #2 MongoDB\BSON\Serializable::bsonSerialize() returning a sequential array for root document

<?php

class MyArray implements MongoDB\BSON\Serializable
{
function
bsonSerialize(): array
{
return [
1, 2, 3];
}
}

$bson = MongoDB\BSON\fromPHP(new MyArray);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

El resultado del ejemplo sería:

{ "0" : 1, "1" : 2, "2" : 3 }

Ejemplo #3 MongoDB\BSON\Serializable::bsonSerialize() returning an associative array for document field

<?php

class MyDocument implements MongoDB\BSON\Serializable
{
function
bsonSerialize(): array
{
return [
'foo' => 'bar'];
}
}

$value = ['document' => new MyDocument];
$bson = MongoDB\BSON\fromPHP($value);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

El resultado del ejemplo sería:

{ "document" : { "foo" : "bar" } }

Ejemplo #4 MongoDB\BSON\Serializable::bsonSerialize() returning a sequential array for document field

<?php

class MyArray implements MongoDB\BSON\Serializable
{
function
bsonSerialize(): array
{
return [
1, 2, 3];
}
}

$value = ['array' => new MyArray];
$bson = MongoDB\BSON\fromPHP($value);
echo
MongoDB\BSON\toJSON($bson), "\n";

?>

El resultado del ejemplo sería:

{ "array" : [ 1, 2, 3 ] }

Ver también

add a note

User Contributed Notes 1 note

up
0
Anonymous
8 years ago
This documentation seems to be obsolete because I tried the first example and it doesn't convert the objectId to a string.

This seems to be more current documentation but I can't figure out how to get bson to json

http://mongodb.github.io/mongo-php-library/api/source-class-MongoDB.Model.BSONDocument.html#48-57
To Top