繁体   English   中英

有关MongoDB模式设计的建议

[英]Advice on MongoDB schema design

我目前正在为将使用mongodb和spring-data的应用程序设计db模式。 我对NoSQL数据库很陌生,并在以下设计问题中苦苦挣扎:

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

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

主要用例将是通过带注释的标签查询用户的注释。 因此,我的第一种方法是将标签嵌入到Notes中。 我可以在这里处理冗余,因为我真的希望快速读取操作以及Notes和/或Tag的更新不太可能经常发生。 但是,我还需要查询用户的所有标签的列表(即在按标签搜索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"
      }
   ]
}

我的主要问题是:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM