2017-02-11 85 views
0

目前,我有以下结构的火力地堡数据库火力地堡 - 查询的扁平数据与双向关系

// 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( '唐纳德')equalTo(真)。

然后再通过结果

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下。你可以通过设置一个标准来减少配对的数量:Donald之前的米奇,因为D在M之前,或者类似的东西。