Firebase-在具有双向关系的平坦数据中进行查询
我目前有一个Firebase数据库,其结构如下Firebase-在具有双向关系的平坦数据中进行查询,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我目前有一个Firebase数据库,其结构如下 // Tracking two-way relationships between users and groups { " users": { "mchen": { "name": "Mary Chen", "groups": { "alpha": true, "charlie": true } }, ...
// 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
}
},
...
}
}
如何编写查询以显示给定用户集的所有共同组。i、 告诉我米奇和唐纳德注册的所有团体 我认为单次查询不可能做到这一点,而且不支持多个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.
这可能是解决你问题的一种方法,但你最初会下载米奇可能不在其中的群组。这可能不是你想要的(安全等)
如果您希望只获取它们都是显式的组,而不进行任何客户端筛选,那么您必须将数据库重组为类似这样的结构
root
L users ...
L groups ...
L groupPairs
L groupName
L DonaldMickey:true
您的查询看起来类似,从组中添加/删除用户将更加复杂。您必须确保每个可能的对都在groupName下。你可以通过设置一个标准来减少配对的数量,例如:Donald在Mickey之前,因为D在M之前,或者诸如此类的东西。你试过什么了吗?