我正在开发一个社交应用程序。我使用Firebase作为我的后端(API' s)。我无法运行单个查询来获取所有需要的数据。我的数据库结构如下:
**post**
{
"postID1":
{ url: "http://stackoverflow.com"
desc: "some description here" }
"postID2":
{ url: "http://google.com"
desc: "again some description here"
}
}
**album**
{
postID1:
{
albumID1:
{
type: 'Image'
name: 'my first album'
}
}
postID2:
{
albumID2:
{
type: 'youtube'
name: 'my second album'
url: 'http://youtube.com'
}
}
**media**
albumID1
{
mediaID1:
{
type: 'abc'
desc: 'some description'
}
}
我希望获得所有帖子,包括其中的所有媒体文件。 例如,我想先得到" postID1"然后它的专辑和媒体文件,所有3个节点通过postID相互连接,这是唯一的。同样适用于" postID2" ...在示例中,我已经解释了与post相关的专辑和媒体,但同样地,我想从其他节点检索数据,如Hashtags,Comments,Likes等。
答案 0 :(得分:1)
使用此结构,您将无法使用单个查询获取数据。 你有2个选择。
1)你要么改变这样的结构。
**post**
-> "postID1":
-> url: "http://stackoverflow.com"
-> desc: "some description here"
-> albumID1
-> type: 'Image'
-> name: 'my first album'
-> mediaID1:
-> type: 'abc'
-> desc: 'some description'
因为我们知道firebase是noSQL所以不需要遵循sql规则。 通过这种结构,您可以在一个查询中获取所有数据
2)您可以在当前结构中编写多个查询。 首先你从post表中获取数据,然后使用post id,你可以从相册中获取数据,然后从相册ID中获取数据,你可以从媒体表中获取数据。
答案 1 :(得分:0)
我专注于专辑方面。您也可以对媒体执行相同的操作。
对于 post 节点,一个查询就足够了
您可以尝试以下方法:
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){
for (DataSnapshot dataSnapshot1:postSnapshot.getChildren()){
//do something here
}
}