我有一个集合,其日期为mongoDB ISODate类型的字段。每当我尝试按升序从该集合中获取数据时它工作正常,但该日期字段返回为Array,这是不可通过PHP读取的。 MongoDB结果的示例响应:
[date] => Array([$date] => Array([$numberLong] => 1496203500000))
我曾尝试将该数组转换为MongoDB \ BSON \ UTCDateTime对象,但这并没有奏效。 请让我知道将该数组转换为php可读的方法。
这与将正常时间戳值转换为MongoDB日期格式无关。当我从PHP获得mongo查询的响应时,我需要这个转换。虽然这样做我得到阵列,因为我提供了相同的样本格式,我无法从PHP中读取。该日期甚至不是简单的时间戳,甚至也无法通过PHP访问密钥。
PHP版本: - 7.1 MongoDB版本: - 3.4
这是我的示例代码,用于理解场景:
insert.php
<?php
$connectionString = "mongodb://localhost";
$mongodb = new \MongoDB\Driver\Manager($connectionString);
$query = new \MongoDB\Driver\BulkWrite();
$writeConcern = new \MongoDB\Driver\WriteConcern(
\MongoDB\Driver\WriteConcern::MAJORITY, 100);
$timestamp = 1453939200 * 1000;
$utcdatetime = new MongoDB\BSON\UTCDateTime($timestamp);
$projection = ["insertion" => $utcdatetime];
$query->insert($projection);
$result = $mongodb->executeBulkWrite("test.datetest",$query,
$writeConcern);
read.php
<?php
$connectionString = "mongodb://localhost";
$mongodb = new \MongoDB\Driver\Manager($connectionString);
$options = ["sort" => ["insertion" => -1], "limit" => 10];
$filter = array();
$query = new \MongoDB\Driver\Query($filter,$options);
$cursor = $mongodb->executeQuery("test.datetest", $query);
foreach($cursor as $key => $row) {
print_r(json_decode(json_encode($row), true));
}
作为回应,我得到日期数组而不是计划时间戳,如下所示:
Array
(
[_id] => Array
(
[$oid] => 5937c857c3f42b49eb626ce2
)
[insertion] => Array
(
[$date] => Array
(
[$numberLong] => 1453939200000
)
)
)
从上面的响应,我无法通过PHP从数组中读取$ numberLong字段。这样做时它给了我空白数组。由于这个原因,我无法将该日期转换为正常的用户可读日期。