我是Meteor和MongoDB以及数据库的完全新手,所以很抱歉。
我正在建立一个像博客一样运作的小型基本网络应用。你有一个帖子,标题,日期等附加了一些东西。除了我想添加标签之外,我已经完成了所有工作。我听说在每个帖子对象中存储所有标签都是个坏主意,而应该使用关系。
所以,到目前为止我已经得到了。
galleryItems = new Mongo.Collection("galleryItems");
galleryTags = new Mongo.Collection("galleryTags");
Mongo中的两个收藏。一个用于项目,一个用于标签。
我有一个表格可以插入这两个数据库。
galleryItems.insert({
text: text,
url: url,
thumbnail: thumbnail,
createdAt: new Date()
});
galleryTags.insert({
tags: tags, // tags is just an array I have created before this
});
我真的很想知道如何将两个集合链接在一起。
答案 0 :(得分:0)
在MongoDB中,我有时会故意避免规范化我的数据。这是因为在基于文档的数据库中引用并不容易。流星不会让它变得更容易。例如,在MongoDB中执行此操作很常见 - embedded documents are by nature denormalized。关于data models on the official MongoDB homepage的信息很好。
我认为您的代码只有名称而没有其他数据?在这种情况下,您希望更改标签的名称还是删除它们?因为这些是在每个帖子中存储标签会导致问题的唯一场景。如果是这种情况,您很可能不需要将标记分成不同的集合。
但是,如果你真的想要规范化你的数据,那么你就是这样做的。您的galleryItems
集合会有一个名为tags
的字段,该字段会存储代码的_id
个。 E.g:
galleryItems: {
text: text,
url: url,
thumbnail: thumbnail,
createdAt: new Date(),
tags: [1, 2, 3]
}
然后你会有一个galleryTags
集合,你可以在其中存储有关标签的信息:
galleryTags: {
_id: 1
name: tagName
}
现在你引用了galleryItems
中的标签,但galleryItems
没有存储有关标签本身的任何信息 - 要获取有关标签的数据,你必须执行查询那个单独的。