這個文件似乎已過時,因為我嘗試了第一個範例,它並沒有將 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 時呼叫。此方法必須回傳 陣列、stdClass、MongoDB\BSON\Document 或 MongoDB\BSON\PackedArray。
根文件(例如傳遞給 MongoDB\BSON\Document::fromPHP() 的 MongoDB\BSON\Serializable)將始終序列化為 BSON 文件。對於欄位值,關聯式陣列和 stdClass 實例將序列化為 BSON 文件,而序列式陣列(即從 0
開始的序列式數值索引)將序列化為 BSON 陣列。
建議使用者在回傳 BSON 根文件的資料時包含 _id 屬性(例如在建構函式中初始化的 MongoDB\BSON\ObjectId)。如果沒有 _id 屬性,擴充套件或伺服器將分別為插入或更新操作產生 MongoDB\BSON\ObjectId。
此函式沒有參數。
要序列化為 BSON 陣列或文件的 陣列、stdClass、MongoDB\BSON\Document 或 MongoDB\BSON\PackedArray。
版本 | 說明 |
---|---|
PECL mongodb 1.17.0 |
回傳類型已從 陣列|物件 變更。現在回傳類型指定 stdClass,而不是 物件。實作此介面的類別必須更改,不再宣告 物件 回傳類型。由於回傳類型是暫定的,因此在 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'];
}
}
echo MongoDB\BSON\Document::fromPHP(new MyDocument)->toRelaxedExtendedJSON(), "\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];
}
}
echo MongoDB\BSON\Document::fromPHP(new MyArray)->toRelaxedExtendedJSON(), "\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];
echo MongoDB\BSON\Document::fromPHP($value)->toRelaxedExtendedJSON(), "\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];
echo MongoDB\BSON\Document::fromPHP($value)->toRelaxedExtendedJSON(), "\n";
?>
上述範例會輸出:
{ "array" : [ 1, 2, 3 ] }
這個文件似乎已過時,因為我嘗試了第一個範例,它並沒有將 objectId 轉換為字串。
這似乎是更新的文件,但我不知道如何將 bson 轉換為 json
http://mongodb.github.io/mongo-php-library/api/source-class-MongoDB.Model.BSONDocument.html#48-57