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


Working with Mongo result objects - problems with _id field

我对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,还是我需要相应地重新转换它?

有没有更好的方法?


更新我只是尝试多次保存一个对象,将其_id为 MongoId,并将其_id为字符串。带有MongoId的对象不会替换那些与字符串具有相同_id的对象,这里的类型很重要。

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

有没有更好的方法?

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

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

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