1

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

如果我定义了一个名为该变量的公共变量,则在插入时_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);

var_dump()s on$obj$found_obj都返回一个带有 的对象_id=NULL。如果我在类定义中注释掉 _id,代码运行正常,并且都var_dump()打印一个 MongoID。

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

4

1 回答 1

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

我认为这个解决方案不优雅,因为程序员现在必须记住在每次 insert 之前添加一行代码MongoTest::insertPrep()。我还尝试添加一个public function __insert()魔术功能,但没有成功:(

我仍在寻找更好的解决方案。但是对于任何有这个问题的人,这里有一个修复,即使这个修复不是我所希望的优雅。

于 2012-06-15T05:32:30.467 回答