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}) 方法进行了测试,成功了!
希望能帮到你
我从 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}) 方法进行了测试,成功了!
希望能帮到你