insert php datetime in mongodb 成为空对象

insert php datetime in mongodb become an empty object

我从 php 7.2 更新到 7.4,当我将日期时间存储在 mongodb

中时,我发现了一个意外行为

所以我试试

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->needToBeDrop->datetime;

$document =[ 
    'name'=>'some date',
    'mongo_date'=> new MongoDB\BSON\UTCDateTime(new DateTime()),
    'date'=> new DateTime()
];
$result = $collection->insertOne($document);

在 php 7.4 我有这样的结果:

{
    "name": "some date 7.4",
    "mongo_date": {
        "$date": 1583845613778
    },
    "date": {}
}

在 php 7.2 中我有

{
    "name": "some date 7.2",
    "mongo_date": {
        "$date": 1583845637335
    },
    "date": {
        "date": "2020-03-10 13:07:17.335813",
        "timezone_type": 3,
        "timezone": "UTC"
    }
}

我怎样才能保持 php 7.2 的行为?

问题与 json 序列化的 DateTime 对象有关。 我试过 PHP 7.4 :

$d = new \DateTime();
echo json_encode(d);

结果是:

{
   "date":"2020-08-14 14:33:33.910110",
   "timezone_type":3,
   "timezone":"UTC"
}

这与PHP 7.2 mongodb记录相同。但是 PHP 7.4 上的 mongodb 扩展(我的 mongodb 扩展版本是 1.6.1)没有正确序列化 DateTime 对象。 我重构了我的代码

["datetime"=>new \DateTime()] 

["datetime"=>json_decode(json_encode(new \DateTime()),true)]

然后我用 sort({"datetime":-1}) 方法进行了测试,成功了!

希望能帮到你