2017-02-11 4 views
0

ich derzeit eine Firebase-Datenbank mit der folgenden StrukturFirebase - Abfragen in abgeflachter Daten mit Zweiweg Beziehung

// 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 
    } 
    }, 
    ... 
} 
} 

habe Wie schreibe ich eine Abfrage, mir zu zeigen, die Gruppen alle eine bestimmte Gruppe von Benutzern gemeinsam hat . Zeige mir alle Gruppen, in denen Mickey und Donald registriert sind.

+0

Haben Sie schon etwas probiert? –

Antwort

0

Ich denke nicht, dass dies mit einer einzigen Abfrage möglich ist, und mehrere equalTo werden nicht unterstützt.

Ich würde restrukturieren Ihre Datenbank als solche

root 
L users 
L groups 
    L groupName 
    L ... 
L groupMembers 
    L groupName 
    L userName:true 

Abfrage dann wie

Query ist reference.child ('Gruppenmitglieder') orderByChild ('Donald') EqualTo (true)..;

Dann gehen Sie durch die Ergebnisse

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. 

, dass ein Weg wäre, um Ihr Problem zu lösen, aber Sie würden zunächst das Herunterladen Gruppen sein, die Mickey nicht voneinander entfernt sein könnten. Dies kann oder kann nicht sein, was Sie wollen (Sicherheit etc ..).

Wenn Sie nur wollten Gruppen erhalten, die sie beide appart von ohne Clientside-Filterung, würden Sie Ihre Datenbank so etwas wie diese restrukturieren müssen.

root 
L users ... 
L groups ... 
L groupPairs 
    L groupName 
    L DonaldMickey:true 

Ihre Abfrage würde ähnlich aussehen, Hinzufügen/Entfernen eines Benutzers aus einer Gruppe wäre aufwendiger. Sie müssten sicherstellen, dass jedes mögliche Paar unter dem Gruppennamen ist. Sie könnten die Anzahl der Paare reduzieren, indem Sie ein Kriterium wie zum Beispiel festlegen: Donald vor Mickey, weil D vor M steht, oder so ähnlich.