我正在使用带有node.js的mongoose。
我目前的架构是:
var linkSchema = new Schema({
text: String,
tags: array,
body: String,
user: String
})
我的用例是这样的:有一个用户列表,每个用户都有一个与之关联的链接列表。用户和链接当然是不同的模式。因此,如何使用mongo-db完成那种一对一的关系。
我应该制作用户架构并在其中嵌入linkSchema吗?或者相反?
另一个疑问。标签总是一个字符串数组,我可以用它来浏览链接。它应该是数组数据类型还是有更好的方式来表示它?
答案 0 :(得分:1)
如果是1:1则将一个文档嵌套在另一个文档中。哪种方式取决于查询,但如果需要,您可以轻松地执行这两种操作。
对于标签,您可以索引一个数组字段并使用它来搜索/过滤文档,并根据您给出的信息听起来合理恕我直言。
如果你有一组固定的标签,那么将这些标签表示为具有命名字段的嵌套对象是有意义的,具体取决于查询。不要忘记你不仅可以在Mongo中创建嵌套文档,还可以搜索子字段,甚至可以将整个嵌套文档用作可搜索/可索引字段。例如,您可以拥有这样的用户名;
email: "joe@somewhere.com"
作为字符串,你也可以这样做;
email: {
user: "joe",
domain: "somewhere.com"
}
您可以在两种情况下索引电子邮件并使用其中一种进行匹配。在后一种情况下,您也可以在不使用RegEx样式查询的情况下搜索域或用户。你也可以存储这两个变种,所以Mongo中有很多灵活的选项。
回到标签,我认为你的字符串数组是一个很好的模型给出你所描述的,但如果你做了更复杂的批量聚合,那么为每个标签存储一个文件并不是很疯狂。相同的文档内容,因为这基本上是您在聚合期间必须为每个查询做的事情。