这是我第一次将对象推入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()
和$obj
上的$found_obj
都返回_id=NULL
的对象。如果我在类定义中注释掉_id,代码会正常运行,并且var_dump()
都会打印一个MongoID。
我想在类中定义一个_id,以使我的代码更清晰,并使我在Netbeans上的代码提示正常工作。我有什么东西可以忽略吗?
答案 0 :(得分: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()
魔法功能,但没有成功:(
我仍然在寻找更好的解决方案。但是对于有这个问题的人来说,即使这个解决方案不是我希望的优雅解决方案,也可以解决这个问题。