2014-12-02 85 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字段,整數或字符串創建自己的類型,它不必是一個對象。