我对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 。 加载较大的对象列表时,这可能会对性能产生严重影响。
有更好的方法吗?
答案 0 :(得分:1)
您应该将字符串表示的字段_id
更改回MongoId
对象:
$array['_id'] = new MongoId($array['_id']);
我认为这不会对性能造成严重影响,最好对其进行测试。另一方面,您仍然可以为_id字段,整数或字符串创建自己的类型,它不必是对象。