尝试使用MongoDB持久保存对象

时间:2010-11-02 15:25:37

标签: php mongodb

首先要做的事情。我可能完全偏离了这一点。我一般都在学习Mongo和NOSql解决方案。我们正在编写的应用程序中有一个新组件,而不是坐下来搞乱关系数据库,我们想要使用更适合我们对象的东西。

让我们举一个简单的例子:

Class User extends \Model {
    public $name;
    public $hobbies;
}

$ name只是一个字符串。但是我们可以说$ hobbies是一个对象或一组对象。我希望能够将它放入数据存储中,以后能够检索它。

起初,我走下了将物体分解成阵列并将其存放在Mongo然后将其拉回并填充物体的道路。使用我制作的通用导入和导出方法非常简单。当我有一些具有其他对象作为成员变量的健壮对象时,问题就出现了,等等。那时我仍然可以导出到一个多维数组并存储它。但是导回到对象变得有问题。

我能做的另一个选择就是seralize()对象并将其存储在mongo中以及一些描述性数据。

SOOOOO。想法?

我的部分问题是我是NOSql产品的新手,并不确定他们的全部限制/潜力。我只是看着Mongo错了,并试图让它做一些它不应该做的事情?我宁愿不使用某些第三方模块,而宁愿写一些简单轻巧的东西。

3 个答案:

答案 0 :(得分:2)

虽然我不想使用第三方应用程序,但Doctrine的Mongo ODM似乎完全符合我的要求。设置好了,到目前为止似乎运作良好。

http://www.doctrine-project.org/projects/mongodb-odm.html

答案 1 :(得分:0)

我认为序列化是走到这里的方式。然后,您可以为每个类使用魔术方法__sleep__wakeup来处理任何棘手的情况。

答案 2 :(得分:0)

此处的另一个选项是将对象序列化为数组而不是仅使用“序列化”。如果我没有弄错,你实际上可以覆盖这些子对象中的“serialize”方法,并且基本上让它们自己序列化为数组(或者更具体地说是散列表)。

如果Doctrine为你做这件事,那就更好了。但如果你只是想要这个功能,你可以自己做饭。