2017-02-11 38 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之前,或者類似的東西。