类定义中的 Mongo _id
Posted
技术标签:
【中文标题】类定义中的 Mongo _id【英文标题】:Mongo _id in class definition 【发布时间】:2012-06-17 08:12:49 【问题描述】:这是我第一次将对象推入 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
和 $found_obj
上的 var_dump()
s 都返回带有 _id=NULL
的对象。如果我在类定义中注释掉 _id,代码运行正常,var_dump()
s 都会打印一个 MongoID。
我想在类中定义一个 _id 以使我的代码更清晰,并使我在 Netbeans 上的代码提示正常工作。有什么我忽略的吗?
【问题讨论】:
在将_id
插入数据库之前,您是否尝试过设置它的值?
我打算使用 MongoDB 自动生成的 MongoID
作为我的主键,稍后我将在我的代码中使用。
【参考方案1】:
好的,所以我找到了一个解决方案,尽管说实话我不喜欢它——对我来说这似乎不优雅。
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()
魔术函数,但没有成功:(
我仍在寻找更好的解决方案。但对于遇到此问题的任何人,这里有一个修复,即使这个修复不是我所希望的优雅。
【讨论】:
以上是关于类定义中的 Mongo _id的主要内容,如果未能解决你的问题,请参考以下文章