我需要数据库设计方面的帮助 在我的应用程序中,有一个注释和答复,注释将作为每个数组项的子文档存储在一个数组中,但是我对于将答复存储在何处有些困惑,我在考虑两种情况< / p>
(1)将回复存储在同一评论子文档中的嵌入式数组中
comments : [
{
commentId: ObjectId("XXXX"),
...
replies : [
{
replyId : ObjectId("XXX")
...
}
]
}
]
(2)新数组(回复),每个元素都是回复的子文档
{
comments :[ .....] ,
replies: [
{
commentId: ObjectId("XXX"),
replies : [ ...]
}
]
}
预先感谢
答案 0 :(得分:0)
方法1
专家:检索非常快,并且与MongoDB文档概念和最佳实践保持一致。仅需要更新的文档,它将更快
缺点:文档大小将随每次活动而增加,并且可能达到16MB的硬限制。如果您确定评论和回复非常有限,那就可以了。
方法2
专家:如果您希望根据用户的请求加载评论以进行评论,那将是一件好事,因为带有评论的文档的权重很小,并且可以控制数据大小
缺点:在MongoDB 4.0中,我们提供了多文档事务支持,如果您能够更新答复但在更新Comment错误时发生了问题,则该支持以前会引起问题。第二个是每次更新您仍然不更新2个文档。
因此方法1或2都取决于您的用例。如果评论和回复受到限制,则在采用Mongodb 4.0事务支持的情况下,方法1最好是其他方法2。