2012-06-14 49 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()魔术功能,但没有出现:(

我仍然在寻找更好的解决方案,但对于任何有此问题的人,即使此修补程序不是优雅的修补程序我希望如此。

相关问题