【问题标题】:How to serialize deserialize mongo document in php?如何在php中序列化反序列化mongo文档?
【发布时间】:2019-04-26 03:31:44
【问题描述】:

我想将一些 mongo 文档保存到 json 文件(类似于备份)。所以当我尝试这样做时,我总是得到 json:

"_id":{"$oid":"..."}

"createdAt":{"$date":{"$numberLong":"...."}}}

那么,我需要做什么或如何获得正确的 "_id" 和 "createdAt" ?我的意思是它应该是 ObjectId 和 ISODate。

"_id" : ObjectId(""),
"createdAt" : ISODate("2016-05-..."),

【问题讨论】:

标签: php mongodb


【解决方案1】:

序列化/反序列化 bson 的一种简洁方法是扩展您的模型/类以实现 MongoDB\BSON\Persistable

class MyModel implements MongoDB\BSON\Persistable{

    public function bsonSerialize()
    {
        return [
            'field1' => $this->field1,
            'date1' => new UTCDateTime($this->dateTimeDate->getTimestamp()*1000)
        ];
    }

    public function bsonUnserialize(array $data){
         $this->field1 = $data['field1'];
         $this->dateTimeDate = $data['date1']->toDateTime();
    }
}

具有该实现,序列化是“自动”完成的,因此您可以按如下方式使用它:

//get document from mongodb
 $document = $this->mycollection->findOne(array('id' => $id->toString())); //parsed class MyModel is returned.

//insert document into mongodb
$this->mycollection->insertOne($myentity); //class is mapped to bson

要将类序列化为JSON,您可以另外实现接口JsonSerializable 并使用json_decode/json_encode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多