我目前有一个具有以下结构的Firebase数据库
// Tracking two-way relationships between users and groups {
" users": {
"mchen": {
"name": "Mary Chen",
"groups": {
"alpha": true,
"charlie": true
}
},
...
}, "groups": {
"alpha": {
"name": "Alpha Group",
"members": {
"mchen": true,
"donald": true
}
}, "bravo": {
"name": "Bravo Group",
"members": {
"mickey": true,
"donald": true
}
},
...
}
}
如何编写查询以向我显示给定用户组共有的所有组。即告诉我米奇和唐纳德都注册的所有团体。
答案 0 :(得分:0)
我认为单个查询无法实现,并且不支持多个equalTo。
我会重构你的数据库
root
L users
L groups
L groupName
L ...
L groupMembers
L groupName
L userName:true
然后查询
查询是reference.child(' groupMembers')。orderByChild(' Donald')。equalTo(true);
然后浏览结果
List resultList
for all DataSnapshot's as snapshot in dataSnapshot's Children
if snapshot.child('Mickey') is not null
add to resultList key of snapshot
// resultList now contains all group keys/names which Donald and Mickey are both appart of.
这将是解决问题的一种方法,但你最初会下载米奇可能不会分开的群组。这可能是也可能不是你想要的(安全等等。)。
如果你只想获得他们都是appart的组而没有任何客户端过滤,你必须将你的数据库重组为这样的。
root
L users ...
L groups ...
L groupPairs
L groupName
L DonaldMickey:true
您的查询看起来很相似,在群组中添加/删除用户会更精细。您必须确保每个可能的对都在groupName下。您可以通过设置一个标准来减少对的数量,例如:在米奇之前的唐纳德,因为D在M之前,或类似的东西。