我试图了解如何根据多个代码从Firebase数据库中检索数据。让我们考虑以下数据结构:
{
"posts":{
"post1":{
"title":"First post",
"description":"that's a nice post",
"tag": ["tag1","tag2","tag3"]
},
"post2":{
"title":"Second post",
"description":"the best post",
"tag": ["tag4","tag5","tag6"]
},
"post3":{
"title":"Third post",
"description":"cool post",
"tag": ["tag5","tag80","tag90"]
}
}
}
每个帖子都有标题,描述和任意大小的标签数组。
我的目标是仅向用户显示具有特定标签的帖子。例如,我可以搜索tag1和tag4,然后我想向用户显示post1和post2。或者搜索tag1和tag5,然后必须显示所有三个帖子。
每篇文章中的标签不是预定义的关键字,它们可以是任何可能的单词,因为也可能是用户设置这些标签的情况。所以我可能会搜索tag100,但数据库中没有任何内容。
我见过几个相似的帖子,但我无法适应这种情况。你能给我一些关于处理这个问题的最佳策略的提示吗?
答案 0 :(得分:3)
我建议为“标签”创建一个单独的结构,如下所示:
{
"posts":{
"post1":{
"title":"First post",
"description":"that's a nice post",
"tag": ["tag1","tag2","tag100"]
},
"post2":{
"title":"Second post",
"description":"the best post",
"tag": ["tag2","tag3","tag100"]
}
// more posts...
},
"tags":{
"tag1": ["post1"],
"tag2": ["post1","post2"],
"tag3": ["post2"],
"tag100": ["post1","post2"]
}
}
这样,每次添加帖子时,都可以从新帖子中获取标签,并检查它们是否存在于“标签”结构中。如果标签已经存在,只需将帖子推到阵列的末端即可。如果标记不存在,则创建该标记属性并将该帖子作为值添加到数组中。
当您在将来查找包含任何搜索标记的帖子时,您只需要进入“标记”结构,找到包含搜索到的标记名称的任何数组,使用这些帖子标题来获取特定帖子,然后您就可以了在路上。
注意:要向代码数组("posts"
和"tags"
结构中)添加值,您应该使用文档here中描述的.push()
功能
希望这有帮助!