我目前正在为将使用 mongodb 和 spring-data 的应用程序设计数据库模式。我对 NoSQL 数据库很陌生,并且正在努力解决以下设计问题:
该应用程序将具有三个简单的域对象Users
:Notes
和Tags
。用户可以拥有多个笔记 (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"
}
]
}
我的主要问题是:
- 如果我使用嵌入,那么有效查询用户所有标签列表(不重复)的最佳方法是什么?
- 在此设置中使用引用而不是嵌入会更好吗?然后,我如何查询所有带有特定标签列表的注释?(这可能吗?)