【问题标题】:Advice on MongoDB schema design关于 MongoDB 模式设计的建议
【发布时间】:2013-06-12 18:13:23
【问题描述】:

我目前正在为将使用 mongodb 和 spring-data 的应用程序设计数据库模式。我对 NoSQL 数据库很陌生,并且正在努力解决以下设计问题:

应用程序将具有三个简单的域对象:UsersNotesTags。用户可以拥有多个笔记 (1:n),每个笔记都使用一个或多个标签 (n:m) 进行注释。

现在我的问题是,我不知道设计笔记和标签之间的一对多关系的最佳方法是什么。

主要用例是通过带注释的标签查询用户的笔记。所以我的第一个方法是在 Notes 中嵌入标签。我可以处理这里的冗余,因为我真的希望快速读取操作以及注释和/或标签的更新不会经常发生。然而,我还需要查询用户的所有标签列表(即在按标签搜索笔记时实现预先输入功能)。

目前我的 Note 文档看起来像这样:

{
   "id":"51bcf4a97aecbafaf5e79713",
   "label":"Label of the Note",
   "contents":"Contents of the Note",
   "owner":"username",
   "tags":[
      {     
         "name":"Tag1",
         "type":"default"
      },
      {     
         "name":"Tag2",
         "type":"default"
      }
   ]
}

我的主要问题是:

  • 如果我使用嵌入,那么有效查询用户所有标签列表(不重复)的最佳方法是什么?
  • 在此设置中使用引用而不是嵌入会更好吗?然后,我如何查询所有带有特定标签列表的注释? (这可能吗?)

【问题讨论】:

    标签: mongodb schema database nosql


    【解决方案1】:

    我建议按照您的描述存储笔记,并将所有使用过的标签另外存储在用户文档中。请记住,数据冗余在 MongoDB 中是可以接受的,而且通常是最好的方法,因为您应该为读取设计架构,而不是为写入设计。

    然后在 Java 端,您只需将标签作为 User 类的属性存储在 Set 中,这样您就可以确保在其中存储唯一数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2012-05-22
      • 2013-12-12
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多