0

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

我当前的架构是这样的:

var linkSchema = new Schema({

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

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

我应该制作一个用户模式并将 linkSchema 嵌入其中吗?还是反过来?

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

4

1 回答 1

1

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

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

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

email: "joe@somewhere.com"

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

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

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

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

于 2012-10-17T23:40:08.487 回答