MongoDB和Meteor.js - 一对多参考

时间:2015-11-29 05:39:04

标签: javascript mongodb meteor

我是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
  });

我真的很想知道如何将两个集合链接在一起。

1 个答案:

答案 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没有存储有关标签本身的任何信息 - 要获取有关标签的数据,你必须执行查询那个单独的。