2012-06-14 48 views
1

這是我第一次將對象推入Mongo - 我使用PHP。我知道MongoDB在使用MongoCollection::insert()函數插入時將_id變量添加到數組中。問題是這樣的:Mongo _id類定義

如果我定義一個名爲_id公共變量的變量上$obj$found_obj仍然NULL插入時

class MognoTest { 
    public _id; 
    public foo; 

    public function __construct(){ 
     $this->foo = 'bar'; 
    } 
} 

$obj = new MongoTest(); 
$Mongo->collection->insert($obj); 
var_dump($obj) 
$found_obj = $Mongo->collection->findOne(); 
var_dump($found_obj); 

var_dump()小號都返回一個對象,具有_id=NULL。如果我在類定義中註釋掉_id,代碼將正常運行,並且兩個var_dump()都會打印一個MongoID。

我想在類中定義一個_id使我的代碼更清晰,並使我的代碼暗示Netbeans正常工作。有我忽略的東西嗎?

+0

在將數據庫插入數據庫之前,您是否嘗試過設置'_id'的值? – maialithar

+0

我打算使用由MongoDB自動生成的'MongoID'作爲我的主鍵,我將使用在我的代碼後面。 –

回答

0

好吧,所以我得到了一個解決方案,雖然我不喜歡它是誠實的 - 對我來說它似乎不雅。

class MognoTest { 
    public _id; 
    public foo; 

    public function __construct($load = NULL){ 
     $this->foo = 'bar'; 
     if ($load != NULL && isset($load['_id'])) 
      $this->_id = $load['_id']; 
    } 
    public function insertPrep(){ 
     if ($this->_id === NULL) 
      unset($this->_id); 
    } 
} 

//create object, prep, insert 
$obj = new MongoTest(); 
$obj->insertPrep(); 
$Mongo->collection->insert($obj); 
var_dump($obj) 

//get object back and reload as object 
$found_obj = $Mongo->collection->findOne(); 
$new_obj = new MongoTest($found_obj); 
var_dump($new_obj); 

我認爲這個解決方案不雅,因爲程序員現在必須記住每插入MongoTest::insertPrep()之前添加一行代碼。我也嘗試添加一個public function __insert()魔術功能,但沒有出現:(

我仍然在尋找更好的解決方案,但對於任何有此問題的人,即使此修補程序不是優雅的修補程序我希望如此。

相關問題