【问题标题】:How to get raw BSON from MongoDB with PHP "mongodb" extension如何使用 PHP“mongodb”扩展从 MongoDB 获取原始 BSON
【发布时间】:2020-05-13 06:25:56
【问题描述】:

我正在尝试使用 PHP 从 mongodb 获取二进制 BSON 字符串,但我不知道如何将文档作为 BSON 获取。它总是首先将其解析为 PHP 对象。

我试图在光标上设置一个typeMap,但这只是将已经解析的PHP对象传递给类中的bsonSerialize($object)函数。

代码如下:

<?php

$db = new \MongoDB\Driver\Manager('mongodb://localhost/test');
$query = new \MongoDB\Driver\Query([]);
$cursor = $db->executeQuery("test.contacts", $query);

foreach($cursor as $document) {
    // $document is already parsed to a PHP stdObject
}

【问题讨论】:

    标签: php mongodb bson


    【解决方案1】:

    在最近的 MongoDB 版本(自 3.6 起)中,文档作为响应的一部分返回,整个响应被序列化为 BSON。这意味着,驱动程序在收到响应时,必须对整个响应进行 BSON 反序列化,然后将部分响应作为找到的文档提供给应用程序。

    驱动程序不会只将文档单独序列化为 BSON。

    因此,如果您需要将单个文档序列化为 BSON,则需要自己完成。

    【讨论】:

    • 有道理,我会接受序列化为 BSON 的整个响应,但似乎 PHP 驱动程序将始终返回一个 MongoDB\Driver\Cursor 对象并且没有办法获得原始响应?
    • 您打算如何处理原始响应?
    • 将它直接传递给MongoDB\BSON\toJSON,看看这是否比几千个文档有性能提升。通过首先跳过(看起来像)内部MongoDB\BSON\toPHP 转换。
    • 好的,假设你这样做了,你打算稍后对 json 序列化的原始响应做什么?
    • 我通过 HTTP 将它发送到浏览器并使用 javascript 反序列化它
    猜你喜欢
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2017-08-05
    • 2016-09-05
    • 2018-08-06
    • 2015-01-24
    • 2015-08-30
    • 2011-02-17
    相关资源
    最近更新 更多