java - 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 中运行该查询,有人知道它应该是什么样子吗?
解决方案
为了实现你想要的,我建议在你的数据库结构中添加另一个节点,如下所示:
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);
推荐阅读
- java - Java Products Method - 多行多列整数乘积
- c# - 如何加入ListQueryable表并返回toList();
- python - 时间序列作为 Django 模型
- python - Python:如何使用 Apache Beam 连接到雪花?
- ios - 如何在表格视图单元格中将子视图添加到stackview?
- java - 如何在 Java 中使用 Mockito 存根方法
- javascript - 如何应用 b 表字段 thClass 或 tdClass 或 class
- flutter - 如何转换 Flutter 的 Future
到未来 ? - php - PDO 无效的布尔参数
- python - 格式化和拆分列表