【问题标题】:Confusion regarding Mongo db Schema. How to make it better?关于 Mongo db Schema 的困惑。如何让它变得更好?
【发布时间】:2012-10-18 07:40:08
【问题描述】:

为此,我正在使用带有 node.js 的猫鼬。

我当前的架构是这样的:

var linkSchema = new Schema({

    text: String,
    tags: array,
    body: String,
    user: String
})

我的用例是这样的:有一个用户列表,每个用户都有一个与之关联的链接列表。用户和链接当然是不同的模式。因此,如何使用 mongo-db 完成这种一对一的关系。

我应该制作一个用户架构并将链接架构嵌入其中吗?还是反过来?

对此的另一个疑问。标签总是一个字符串数组,我以后可以用它来浏览链接。它应该是数组数据类型还是有更好的方法来表示它?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    如果是 1:1,则将一个文档嵌套在另一个文档中。哪种方式取决于查询,但如果需要,您可以轻松地同时执行这两种方式。

    对于标签,您可以索引一个数组字段并将其用于搜索/过滤文档,并且根据您提供的信息,恕我直言。

    如果您有一组固定的标签,则可能将它们表示为具有命名字段的嵌套对象,具体取决于查询。不要忘记您不仅可以在 Mongo 中创建嵌套文档,还可以搜索子字段,甚至可以将整个嵌套文档用作可搜索/可索引的字段。例如,您可以使用这样的用户名;

    email: "joe@somewhere.com"
    

    作为一个字符串,你也可以这样做;

     email: {
         user: "joe",
         domain: "somewhere.com"
     }
    

    您可以在这两种情况下为电子邮件编制索引,并使用其中任何一种进行匹配。在后一种情况下,尽管您也可以仅搜索域或用户,而无需使用 RegEx 样式查询。您还可以存储这两种变体,因此 Mongo 中有很多灵活的选项。

    回到标签,我认为根据您所描述的内容,您的字符串数组是一个很好的模型,但是如果您进行更复杂的批量聚合,那么为每个标签存储一个文档并带有相同的文档内容,因为这基本上是您在聚合期间对每个查询都必须做的事情。

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多