Php 类定义中的Mongo\u id

Php 类定义中的Mongo\u id,php,mongodb-php,Php,Mongodb Php,这是我第一次将对象推入Mongo——我正在使用PHP。我知道MongoDB在使用MongoCollection::insert函数插入时将_id变量添加到数组中。问题是: 如果我定义了一个名为_id的公共变量,那么在插入时该变量将保持NULL class MognoTest { public _id; public foo; public function __construct(){ $this->foo = 'bar'; } } $o

这是我第一次将对象推入Mongo——我正在使用PHP。我知道MongoDB在使用MongoCollection::insert函数插入时将_id变量添加到数组中。问题是:

如果我定义了一个名为_id的公共变量,那么在插入时该变量将保持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);
$obj上的var_转储和$found_obj都返回一个_id=NULL的对象。如果我在类定义中注释掉_id,代码将正常运行,并且两个var_转储都会打印一个MongoID


我想在类中定义一个_id,以使我的代码更清晰,并使我在Netbeans上的代码暗示正常工作。有什么我忽略了的吗?

好吧,我找到了一个解决方案,尽管说实话我不喜欢——对我来说,这似乎不雅观

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);

我认为这个解决方案不优雅,因为程序员现在必须记住在每个插入MangoTest::INSERT PREP之前添加一行代码。我还尝试添加一个公共函数\uuuu insert magic函数,但没有成功:


我仍然在寻找更好的解决方案。但是对于任何有这个问题的人来说,这里有一个解决方案,即使这个解决方案不是我所希望的完美解决方案。

在将_id插入数据库之前,您是否尝试过设置它的值?我计划使用MongoDB自动生成的MongoID作为我的主键,稍后我将在代码中使用它。