【问题标题】:MongoDB and Meteor.js - One-To-Many referencesMongoDB 和 Meteor.js - 一对多参考
【发布时间】:2015-11-29 16:08:09
【问题描述】:

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

我真的很困惑如何将这两个集合链接在一起。

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    在 MongoDB 中,我有时会故意避免规范化我的数据。这是因为在基于文档的数据库中使用引用并不容易。流星并没有让它变得更容易。在 MongoDB 中执行此操作很常见 - 例如,embedded documents are by nature denormalizeddata models on the official MongoDB homepage 有很好的信息。

    我假设您的标签只有名称而没有其他数据?在这种情况下,您希望更改标签的名称还是删除它们?因为这些是在每个帖子中存储标签会带来问题的唯一场景。如果是这种情况,您很可能不需要将标签分成不同的集合。

    但是,如果您真的确实想要标准化您的数据,那么您可以这样做。您的galleryItems 集合将有一个名为tags 的字段,它将存储标签的_ids。例如:

    galleryItems: {
        text: text,
        url: url,
        thumbnail: thumbnail,
        createdAt: new Date(),
        tags: [1, 2, 3]
    }
    

    然后您将拥有一个 galleryTags 集合,您可以在其中存储有关标签的信息:

    galleryTags: {
        _id: 1
        name: tagName
    }
    

    现在您已经引用了galleryItems 中的标签,但galleryItems 不存储有关标签本身的任何信息 - 要获取有关标签的数据,您必须单独执行查询。

    【讨论】:

    • 谢谢奥斯卡。我将规范化我的数据,因为我想显示一个大标签列表以及每个标签关联的帖子数量。非常感谢
    • @JordanOverbye 如果您的标签除了名称之外没有其他数据,那么根本没有意义。
    猜你喜欢
    • 1970-01-01
    • 2017-04-29
    • 2016-03-17
    • 2018-10-14
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多