我有一个用 swift 和 firebase 构建的基本应用程序,每个帖子都可以用另一个帖子回复。这些回复帖子可以有自己的回复等等。我的数据库设置为一棵树,其中“Posttree”是树的根,第一层是所有原始帖子。对每个原始帖子的回复都存储在每个 1 级节点下的“回复”集合中。
给定一个大小为 x 的数组,代表文档的路径,如何设置查询?如何将每个调用链接到
.document(databaseLocation[0]).collection("replies")
?有没有更好的方法在 firebase 数据库中配置此设置?
func getPost(){
let documentToFetch = "wefjqnwocb2f"
// example
let databaseLocation = ["ferfwerf", "3e239hdwedwb", "fn32h49ffnf"]
// based on databaseLocation the query should be
var query = db.collection("Posttree")
.document(databaseLocation[0]).collection("replies")
.document(databaseLocation[1]).collection("replies")
.document(databaseLocation[2]).collection("replies")
.document(documentToFetch)
}
示例
Posttree
Post1 Post2
(Post1/reply1) (Post1/reply2) (Post2/reply1) (Post2/reply2)
|
(Post1/reply2/reply1)
像这样的嵌套结构是一种常见的反模式。仅仅因为数据库允许您存储层次结构,并不意味着您应该在数据结构中对功能/内容层次结构进行建模。
我的常见经验法则是每种类型的内容应仅存在于层次结构中的一个级别中。
因此,如果您有帖子和回复,我希望看到某一级别的帖子和一个其他级别的回复。没有嵌套回复。
然后,您可以通过让每个评论都有一个引用其帖子父评论的父 ID 来构建内容层次结构。
事实上,我通常不会将帖子和回复分开,而只是将“帖子”集合放在一个级别上,并且每个级别中都有一个可以为空的父 ID 字段(对于顶级帖子) .