2014-12-02 60 views
0

对于MongoDB来说,这很新颖,并且有一些小麻烦。在Mongo中,我从数据库中获得的每个对象都有特殊的_id字段。这个字段当然需要唯一标识我的对象。使用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。 加载更大的对象列表时,这可能会造成严重的性能影响。

有没有更好的方法?

+0

更改字符串代表'_id'回到对象? '$ array ['_ id'] = new MongoId('547dc96b5c5db8a80f000029');' – 2014-12-02 15:17:29

+0

@Glavić所以你认为我必须重新发送每个_id到MongoId对象,然后再发送到数据库? – ToBe 2014-12-02 15:18:15

+0

最简单的方法是测试这个,但我认为如果'_id'呈现为字符串,它将替换mongodb中的对象。请尝试... – 2014-12-02 15:20:15

回答

1

您应该更改字符串代表现场_id回一个MongoId对象:

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

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

相关问题