使用Mongo结果对象 - _id字段的问题

时间:2014-12-02 15:12:21

标签: php json mongodb

我对MongoDB很新,并且遇到一些小麻烦。在Mongo中,我从数据库中获取的每个对象都有一个特殊的_id字段。当然需要该字段来唯一地标识我的对象。

现在在PHP中,我的对象作为一个带有特殊_id字段的数组返回。

Array (
    [_id] => MongoId Object (
        [$id] => 547dc96b5c5db8a80f000029
    )
    [somekey] => somevalue
)

当编码为JSON,通过一些前端发送并再次在PHP中解码时,_id字段当然已被转换/销毁。

为了避免这种情况,我想在从Mongo数据库中获取后,我必须转换_id字段。

Array (
    [_id] =>  547dc96b5c5db8a80f000029
    [somekey] => somevalue
)

现在它可以安全地编码和解码,但我想要。

但是这个对象再次保存在MongoDB中会有效吗?即使在这种形式下,Mongo会使用_id字段作为它的Mongo ObjectId吗?或者我是否需要相应地重新编写它?

有更好的方法吗?

<小时/> 的更新 我只是尝试使用它作为MongoId和它的_id作为字符串保存一个对象几次。具有MongoId的对象将那些具有相同_id的对象替换为字符串,类型在这里很重要。

这将是我从db获得的每个对象都需要手动转换它,并且在使用客户端从某些JSON收到它之后,我将不得不再次将evrry _id重新转换为MongoId 。 加载较大的对象列表时,这可能会对性能产生严重影响。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您应该将字符串表示的字段_id更改回MongoId对象:

$array['_id'] = new MongoId($array['_id']);

我认为这不会对性能造成严重影响,最好对其进行测试。另一方面,您仍然可以为_id字段,整数或字符串创建自己的类型,它不必是对象。