此文档似乎已过时,因为我尝试了第一个示例,但它没有将 objectId 转换为字符串。
这似乎是更最新的文档,但我无法弄清楚如何将 bson 转换为 json
http://mongodb.github.io/mongo-php-library/api/source-class-MongoDB.Model.BSONDocument.html#48-57
(mongodb >=1.0.0)
MongoDB\BSON\Serializable::bsonSerialize — 提供一个数组或文档以序列化为 BSON
在将对象序列化为 BSON 时调用。该方法必须返回一个 array、stdClass、MongoDB\BSON\Document 或 MongoDB\BSON\PackedArray。
根文档(例如传递给 MongoDB\BSON\fromPHP() 的 MongoDB\BSON\Serializable)将始终序列化为 BSON 文档。对于字段值,关联数组和 stdClass 实例将序列化为 BSON 文档,而顺序数组(即顺序的,从 0
开始的数字索引)将序列化为 BSON 数组。
鼓励用户在返回 BSON 根文档的数据时包含一个 _id 属性(例如在构造函数中初始化的 MongoDB\BSON\ObjectId)。在没有 _id 属性的情况下,扩展或服务器将分别为插入或更新操作生成一个 MongoDB\BSON\ObjectId。
此函数没有参数。
一个 array、stdClass、MongoDB\BSON\Document 或 MongoDB\BSON\PackedArray,要序列化为 BSON 数组或文档。
版本 | 说明 |
---|---|
PECL mongodb 1.17.0 |
返回值类型已从 array|object 更改。返回值类型不再是 object,而是指定 stdClass。实现此接口的类必须更改为不再声明 object 返回类型。由于返回值类型是暂定的,因此在 PHP 8.1 及更高版本上会发出弃用警告。 除了上述更改之外,扩展现在还支持返回 MongoDB\BSON\Document 和 MongoDB\BSON\PackedArray 的实例。请注意,当存储为根文档时,返回的任何 MongoDB\BSON\PackedArray 实例都会被静默地转换为对象。当用作嵌入式字段值时,它们将存储为数组。 |
示例 #1 MongoDB\BSON\Serializable::bsonSerialize() 返回一个关联数组以作为根文档
<?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";
?>
上面的示例将输出类似于
{ "_id" : { "$oid" : "56cccdcada14d8755a58c591" }, "foo" : "bar" }
示例 #2 MongoDB\BSON\Serializable::bsonSerialize() 返回一个顺序数组以作为根文档
<?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";
?>
上面的示例将输出
{ "0" : 1, "1" : 2, "2" : 3 }
示例 #3 MongoDB\BSON\Serializable::bsonSerialize() 返回一个关联数组以作为文档字段
<?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";
?>
上面的示例将输出
{ "document" : { "foo" : "bar" } }
示例 #4 MongoDB\BSON\Serializable::bsonSerialize() 返回一个顺序数组以作为文档字段
<?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";
?>
上面的示例将输出
{ "array" : [ 1, 2, 3 ] }
此文档似乎已过时,因为我尝试了第一个示例,但它没有将 objectId 转换为字符串。
这似乎是更最新的文档,但我无法弄清楚如何将 bson 转换为 json
http://mongodb.github.io/mongo-php-library/api/source-class-MongoDB.Model.BSONDocument.html#48-57