【问题标题】:Design MongoDb Schema For My Social为我的社交设计 MongoDb 架构
【发布时间】:2013-01-11 17:11:39
【问题描述】:

我是 MongoDB 新手,我只想创建一个简单的项目来测试 MongoDB 的性能 该项目就像一个简单的 CMS 它有用户、博客和cmets,用户可以有朋友

所以我这样设计我的数据库

user
{
     _ID:
    name:
    birth_day:
    sex:

    friends:[id_1,Id_2]
}
blogs
{
    title:
    owner: 
    tags_fiends:
    comments:
    [
        {"_id":"","content":"","date_created":""},
        {"_id":"","content":"","date_created":""},
    ],
    "like"={"_id","_id"}
}

以及该数据库需要多少个集合。我可以为用户和博客使用 1 个集合吗?提前致谢。

【问题讨论】:

标签: mongodb database-design nosql


【解决方案1】:

由于 mongoDB 是无模式或无模式的数据库,您可以在文档中创建任何类型的结构,这是受支持的:

  • 单个元素
  • 嵌套数组
  • 嵌套文档

在架构设计期间您必须考虑几件事情,因为将用户和博客放在分开的架构中是很有用的。例如,如果您将某些内容存储在嵌套数组中,则可以指定索引以在该数组中固定搜索,但在一个特定集合中只能有一个多键索引(索引数组内容)。因此,如果您将朋友和博客、帖子和标签都存储在数组中,您只能在其中一个上拥有索引。

同样重要的是要知道在这种情况下每个文档的大小限制现在是 16MB。

【讨论】:

    【解决方案2】:

    在您的场景中,我会将 Users 设为一个集合,并通过博客集合中的 _id 引用它。

    在实践中,您可以将博客设置为用户的属性,唯一的限制是最大 16MB 的文档大小 - 但这是很多博客(文本)。

    为了解决这个问题(假设您需要),一个单独的博客集合引用用户 _id 就可以了。如果那不是您的 _id,您可能也需要对用户名进行非规范化。这意味着您可以在单个查询中获取用户的所有博客。

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 2020-01-29
      • 1970-01-01
      • 2012-08-25
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      相关资源
      最近更新 更多