首页 > 解决方案 > Firebase - 查询嵌套键?

问题描述

我正在运行一个 Android 应用程序,该应用程序处理一些数据Events以及Users受邀者。我有一个页面需要显示用户被邀请参加的所有事件,但我对 Firebase 比较陌生,我不确定查询语法如何适用于我当前的数据结构。

我的数据结构(带有虚拟键)的示例如下所示:

events
    event1_key
        eventName: "test event"
        eventAdmin: "userAdmin"
        eventInvites
            user1_key
                attending: true
                responseTimestamp: 1525416294951
            user2_key
                //...
    event2_key
        //...
        eventInvites
            user2_key
                //...
            user3_key
                //...

所以使用这个例子,如果我正在寻找所有user1_key被邀请的事件,查询应该只返回event1_key记录,因为那个有一个嵌套eventInvite的 for user1_key

如果我在 Java for Android Studio 中运行该查询,有人知道它应该是什么样子吗?

标签: javaandroidfirebase-realtime-database

解决方案


为了实现你想要的,我建议在你的数据库结构中添加另一个节点,如下所示:

Firebase-root
    |
    --- userEvents
           |
           --- user1_key
                 |
                 --- event1_key: true
                 |
                 --- event2_key: true

通过这种方式,您将能够一次读取与特定用户相对应的所有事件,而无需下载整个events对象。要获取这些 ID,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userKeyRef = rootRef.child("userEvents").child(userKey);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String eventKey = ds.getKey();
            Log.d("TAG", eventKey);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userKeyRef.addListenerForSingleValueEvent(valueEventListener);

推荐阅读