0

我从 CodeIgniter/MySQL 来到 Laravel/MongoDB。

例如,按平台具有不同变量的 User 类:

我的网站使用变量:

  • ID
  • 姓名
  • browser_kind

在移动应用程序中使用变量:

  • ID
  • 姓名
  • ios_version

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

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

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

4

2 回答 2

1

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

于 2013-03-05T19:09:23.430 回答
1

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

但是,由于您似乎在这里有两种静态模式,我建议您考虑不要将browser_kind和存储ios_version在同一个文档中作为一个或另一个 being null

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

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

因此,我会按照你得到的方式保留模型,但我会使用一个函数,比如array_filter删除你不想保存的字段。

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

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

于 2013-03-05T19:22:10.643 回答