我有这个数据库:
event_users
- eventid1:
- userid1: "username1"
- userid2: "username2"
- eventid2:
- userid2: "username2"
- userid4: "username4"
我想获取用户号码2所在的所有事件ID。所以,正如我所关注的,我可以使用orderByChild(userid2)来实现这一点。这是我的代码:
rootRef.child(EVENT_USERS_KEY).orderByChild(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.d(TAG, dataSnapshot.getValue().toString());
final long eventCount = dataSnapshot.getChildrenCount();
Log.d(TAG, String.valueOf(eventCount));
...
}
说'uid'是用户2的用户ID,它会检索我所有事件。没关系,因为用户2是两个事件的参与者。但是,如果我为userid1更改了它,它仍会检索我所有事件,而它应该只获取第一个事件。我是否正确理解了orderByChild()方法?
答案 0 :(得分:1)
要获取存在用户编号2的所有事件ID,我建议您创建另一个名为users
的节点,如下所示:
event_users
- eventid1:
- userid1: "username1"
- userid2: "username2"
- eventid2:
- userid2: "username2"
- userid4: "username4"
users
- userid1
- events
- eventid1: true
- userid2
- events
- eventid1: true
- eventid2: true
因此,要实现这一点,您只需要在\users\userId\eventId
上设置一个侦听器,并从特定事件中获取所有事件ID。这个tehnique被命名为非规范化。我建议你看一下这个tutorial。
希望它有所帮助。
答案 1 :(得分:1)
Firebase SDK不允许多级过滤。
要么必须遍历每个事件,请检查该事件是否包含userid2,如果为true,则将其添加到列表中。它很容易实现,但如果数据很大,将会永远执行
否则,请检查Alex Mamo's Answer,这是推荐的方法,但需要修改数据库结构并为以前的数据创建标记。