【问题标题】:MongoDB should i make another collection or should i embed itMongoDB 我应该制作另一个集合还是应该嵌入它
【发布时间】:2021-08-02 15:38:12
【问题描述】:

我正在制作一个来自 node js 的音乐应用程序,我选择了 mongodb 作为它的数据库。我知道 mongodb 操作的基本语法,但我是模式设计的新手。在mongoDB之前我没有学过任何数据库软件。

所以在这个应用程序中,每次用户喜欢一首歌时,我都会将这首歌的所有重要数据存储在单独的集合中,称为tracker 和liked,这样可以更容易地制定推荐算法。 users 集合架构是这样的:

{
  uid: Unique Custom Ids,
  private: {
     email: email,
     phone: number,
  },
  public: {
    profile: {
      info: {
         bio: String,
         name: String,
         username: String
      },
      src: {
        pfpSrc: Url
      }
    }
  }
}

我的跟踪器集合架构如下所示:

{
  uid: custom uid,
  byLiked: {
    genre: {
      genreName: "No of time user liked this genre"
    },
    tags: {
      tag: "No of time user liked this tag"
    }
  },
    byPlays: {
    genre: {
      genreName: "No of time user liked this genre"
    },
    tags: {
      tag: "No of time user liked this tag"
    }
  }
}

liked 集合架构如下所示:

{
  uid: "custom uid",
  tracks: [
    {song_id: "custom song id"},
    ...
  ]
}

我应该这样做还是将所有这些集合嵌入到users集合的文档中?

【问题讨论】:

    标签: node.js database mongodb database-design schema


    【解决方案1】:

    考虑以下内容。

    基本上有 3 个标准,您可以根据这些标准来决定是应该嵌入还是引用相关实体。

    这个标准是:

    • 关系类型,
    • 数据访问模式(读取和写入数据的频率),
    • 数据紧密度(数据“有多少”相关,我们要如何查询)

    在评估时,您应该结合所有这三个标准。

    在以下情况下选择嵌入:

    • 关系是一对多或一对多(不是太多)
    • 数据大部分是读取的,不会快速更改
    • 数据集确实属于同一类

    在以下情况下选择引用:

    • 关系是一对多、一对多(基于文档的数据库中的新术语)、多对多
    • 数据更新很多
    • 两个数据集都需要自己频繁查询

    查看您的场景,我强烈建议选择引用。

    【讨论】:

    • 如果您对答案感到满意,请标记为已接受。谢谢。
    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2012-02-01
    相关资源
    最近更新 更多