关于Mongo db Schema的困惑。如何让它变得更好?

时间:2012-10-17 18:17:09

标签: mongodb mongoose

我正在使用带有node.js的mongoose。

我目前的架构是:

var linkSchema = new Schema({

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

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

我应该制作用户架构并在其中嵌入linkSchema吗?或者相反?

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

1 个答案:

答案 0 :(得分:1)

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

对于标签,您可以索引一个数组字段并使用它来搜索/过滤文档,并根据您给出的信息听起来合理恕我直言。

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

email: "joe@somewhere.com"

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

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

您可以在两种情况下索引电子邮件并使用其中一种进行匹配。在后一种情况下,您也可以在不使用RegEx样式查询的情况下搜索域或用户。你也可以存储这两个变种,所以Mongo中有很多灵活的选项。

回到标签,我认为你的字符串数组是一个很好的模型给出你所描述的,但如果你做了更复杂的批量聚合,那么为每个标签存储一个文件并不是很疯狂。相同的文档内容,因为这基本上是您在聚合期间必须为每个查询做的事情。