如果子内容包含某些内容,如何查询数据库以获取子项?

时间:2017-03-31 01:05:31

标签: android firebase firebase-realtime-database

我有一个看起来像这样的架构。我希望数据库返回一个子(post-ID)及其内容,如果favoriteBy包含我正在寻找的UID。这可能吗?

enter image description here

UID由此变量定义:

private final String UID = FirebaseAuth.getInstance().getCurrentUser().getUid();

作为参考,要获取用户发布的所有用户帖子,将使用此Query对象获取该帖子:

databaseReference.child("user-posts").child(UID).limitToFirst(100);

1 个答案:

答案 0 :(得分:0)

Firebase不提供大量过滤工具来查询数据。因此,仅使用您当前的结构,这是不可能的。

在不改变您当前帖子结构的情况下,我建议您做的是,每当用户将帖子设置为收藏时,您还会以稍后可以轻松获取此数据的方式更新firebase数据库的另一个分支。

因此,您可以将海报所有者UID和postID保存在赞成帖子的UID下。

favoritedPosts: {
    UID: { //UID you are looking for
        postOwnerUID: {
            postID: true
        }
     }
}

然后,您可以轻松获得收藏的帖子postOwnerUIDpostID,例如:

databaseReference.child('favoritedPosts').child(UID)

上述查询将返回一个带有postOwnerUIDs及其postIDs的对象,最后您可以迭代此对象以使用您现在拥有的ID检索帖子内容。

databaseReference.child('user-posts').child(postOwnerUID).child(postID)