对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

使用扩展JSON数据

在本指南中,您可以学习;了解在与MongoDB文档交互时如何使用扩展JSON数据格式。

JSON是一种人类可读的数据格式,用于表示对象值、数组、数字、字符串、布尔值和空值。此格式仅支持BSON数据类型的子集,而MongoDB正是使用该格式来存储数据。扩展JSON格式支持更多BSON 类型,定义了一设立以 "$" 为前缀的保留键,用于表示直接对应于BSON中每种类型的字段类型信息。

MongoDB扩展JSON采用两种字符串格式来表示BSON数据。 每种格式都符合JSON RFC 并满足特定的使用案例。

下表描述了每种扩展JSON格式:

名称
说明

规范或扩展

一种 string 格式,可避免在数据转换过程中丢失 BSON 类型信息。
这种格式优先考虑类型保存,但会牺牲人类可读性以及与旧格式的互操作性。

宽松模式

一种 string 格式,用于描述 BSON 文档,但会丢失某些类型信息。
这种格式优先考虑人类可读性和互操作性,但会丢失某些类型的信息。

要学习;了解有关JSON、 BSON和扩展JSON的更多信息,请参阅JSON和BSON资源以及扩展JSON MongoDB Server手册条目。

以下示例显示了一份包含 ObjectId、日期和以扩展JSON格式表示的长数字字段的文档。选择Canonical或Relaxed Mode标签页以查看每种扩展JSON格式的示例文档:

{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": { "$numberLong": "1601499609" }},
"numViews": { "$numberLong": "36520312" }
}
{
"_id": { "$oid": "573a1391f29313caabcd9637" },
"createdAt": { "$date": "2020-09-30T18:22:51.648Z" },
"numViews": 36520312
}

您可以使用 toRelaxedExtendedJSON() 和 toCanonicalExtendedJSON() 方法从BSON文档对象写入扩展JSON字符串。

以下示例会输出宽松 JSON 格式和规范扩展JSON格式的BSON文档:

$doc = [
'foo' => [1, 2],
'bar' => ['hello' => 'world'],
'code' => new MongoDB\BSON\Javascript('function x() { return 1; }', []),
'date' => new DateTime('2024-07-20 10:30:00'),
];
echo 'Relaxed format: ' , MongoDB\BSON\Document::fromPHP($doc)->toRelaxedExtendedJSON(), PHP_EOL;
echo 'Canonical format: ' , MongoDB\BSON\Document::fromPHP($doc)->toCanonicalExtendedJSON(), PHP_EOL;

您可以通过调用 json_decode() 方法将扩展JSON字符串读入PHP值,该方法将扩展JSON转换为PHP大量或对象。 将以下参数传递给 json_decode():

  • 要读取的扩展JSON字符串。

  • 布尔值,表示是否要返回大量值。如果设立为 false,该方法将返回一个对象值。

以下示例将扩展JSON字符串值转换为PHP大量:

$ejsonStr = '{
"foo": [
{ "$numberInt": "1" },
{ "$numberInt": "2" }
],
"bar": { "hello": "world" },
"code": {
"$code": "function x() { return 1; }",
"$scope": {}
},
"bin": { "$binary": { "base64": "AQIDBA==", "subType": "00" } }
}';
$decodedJson = json_decode($ejsonStr, true);
print_r($decodedJson);

要学习;了解有关本页所讨论方法的更多信息,请参阅以下PHP扩展API文档: