【问题标题】:MongoDB and MVC model variablesMongoDB 和 MVC 模型变量
【发布时间】:2013-03-05 17:54:23
【问题描述】:

我从 CodeIgniter/MySQL 来到 Laravel/MongoDB。

例如一个不同平台变量的用户类:

我的网站使用变量:

  • 身份证
  • 姓名
  • browser_kind

在移动应用中使用变量:

  • 身份证
  • 姓名
  • ios_version

考虑到这种情况,在我的模型中我应该同时拥有两个变量吗?

<?php
    class user{
        public $id;
        public $name;
        public $browser_kind;
        public $ios_version;
    }
?>

不需要预定义结构的 NoSQL 优势如何?如何在模型中使用它?

【问题讨论】:

    标签: php mongodb nosql


    【解决方案1】:

    仅仅因为 Mongo 不需要模式,您仍然需要对模型进行建模。最大的好处之一是您可以更改数据模型而无需 Mongo 挂断您的电话。

    【讨论】:

      【解决方案2】:

      我个人只会将nullbrowser_kindios_version 存储在同一个文档中。这样做的原因是为了将来的扩展。 IOS 确实支持 Firefox 和 Opera Mini 等,因此考虑到这一点,我建议您将整个架构存储在一起。

      但是,由于您似乎在这里有两种静态架构,我建议您考虑不要将 browser_kindios_version 存储在同一文档中,因为其中一个是 null

      由于这两个模式永远不会重叠(根据我们对您的场景的了解),您将只使用相当数量的宝贵空间,具体取决于集合中有多少文档。这是因为 MongoDB 目前不压缩其文件。

      在非移动用户需要它们的文档中,这些字段似乎永远不会是null,即browser_kind,而所有其他字段永远不会是null

      因此,我会按照您获得的方式保留模型,但我会使用 array_filter 之类的函数来删除您不想保存的字段。

      当然,这是一个问题,您正在使用一个框架,它将所有这些逻辑抽象到一个您可能无法到达的地方,除非您自己做很多事情。考虑到这一点,您可以创建两个从单个 user 类中抽象出来的类,一个定义 browser_kind,另一个定义 ios_version,但这会开始增加您的应用程序的权重。

      因此,这为您提供了一些选择和需要考虑的事情。

      【讨论】:

        猜你喜欢
        • 2014-06-15
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多