2016-05-31 6 views
6

Ich habe diese Struktur:Firebase Sicherheitsregeln: .indexOn eindeutige IDs

"post": { 
    "groupMember": { 
    "-KHFHEHFWDB1213": "true", 
    "-KSJHDDJISIS011": "true", 
    "-KJSIO19229129k": "true" 
    } 
} 

Ich möchte die automatisch generierte eindeutige Gruppenmitglied IDs .indexOn.

Ich habe versucht, dies zu tun:

"post": { 
    ".indexOn": "groupMember" 
    ... 
} 

Aber ich bin immer noch diesen Fehler:

Erwägen Sie ".indexOn": "Gruppenmitglied/-KHFHEHFWDB1213" an/Post

Also, wie füge ich eine .indexOn auf eine eindeutige ID?

UPDATE:

Dies ist die Abfrage, die ich (in Swift) verwenden:

postRef.queryOrderedByChild("groupMember/\(uid)").queryEqualToValue(true).observeEventType(.Value, ...) 
+1

Korrigieren Sie mich, wenn ich jemanden falsch liege, aber ich bin ziemlich sicher, dass es standardmäßig auf Schlüssel indiziert? – Chris

+0

Können Sie die von Ihnen verwendete Abfrage angeben, die einen Indexierungsfehler verursacht? Chris hat Korrekt, dass Firebase standardmäßig Schlüssel indiziert, daher ist meine Vermutung, dass die Abfrage selbst schlecht gebildet ist. –

+0

@MichaelBleigh Ich habe meinen Beitrag aktualisiert – leonardloo

Antwort

1

abzufragen, ob einer der vorgegebenen Tasten Wert hat "true" (beachten Sie, dass Ihre Daten eingegeben Struktur ist eine Zeichenfolge, kein boolean - etwas zu achten ist) Sie wollen Sicherheitsregeln erstellen, wie so:

{ 
    "post": { 
    "groupMember": { 
     "$memberId": {".indexOn": ".value"} 
    } 
    } 
} 

Und dann queryOrderedByValue("true") auf dem /post/groupMember Pfad verwenden. Wichtig zu beachten ist $memberId in den Regeln, die einen Platzhalterschlüssel für Ihre automatisch generierten IDs und .value deklariert. Dies deutet darauf hin, dass die Indizierung für eine untergeordnete Eigenschaft (wenn Ihre Struktur eine andere Verschachtelungsebene hatte) auf dem unmittelbaren Blatt indiziert werden soll Knotenwert.

+0

Danke für die Antwort. Wenn ich dies jedoch über den '/ post/groupMember'-Pfad abfrage, wie bekomme ich dann die übergeordnete Information, wie Zeug auf'/post/message'? – leonardloo

+0

Ich denke, ich bin mir nicht sicher, was genau Sie vorhaben. Versuchen Sie, eine Gruppe von Posts nach dem aktuellen Benutzer als Gruppenmitglied zu filtern? In diesem Fall sollten Sie Ihre Daten und die mögliche Denormalisierung neu strukturieren. Wenn nicht, was genau möchten Sie erreichen? –

+0

Also mit der Antwort bezieht sich das Attribut .value zurück auf den Wert groupMember? Wenn ich eine Wildcard $ uid anstelle von groupMember habe und davon indizieren wollte, würde der .indexOn: .value hier noch anwendbar sein? – Silmarilos