我对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字段、整数或字符串创建自己的类型,它不必是对象。