2017-10-20 6 views
11

Ich habe ein Dokument "Benutzer", die einen Schlüssel namens "Fotos" hat. Hier wird ein Array von Zeichenketten gespeichert, nämlich die IDs der "Foto" -Dokumente.Firestore: Abfrage nach Element im Array des Dokuments

Ich möchte "Benutzer" von diesem "Fotos" -Feld abfragen: Ich möchte alle Benutzer, die diese ID in der Eigenschaft "Fotos" haben.

Ist das durch Firestore möglich?

Antwort

11

Leider noch nicht, obwohl es auf unserer Roadmap steht.

In der Zwischenzeit werden Sie eine Karte stattdessen verwenden müssen, in Form von:

photos: { 
    id1: true 
    id2: true 
} 

Jetzt können Sie alle Benutzer mit id1 finden, indem Sie durch photos.id1 == true Filterung.

Lesen Sie mehr über die Abfrage solcher Sätze in der Firebase documentation. Hier

+4

Wird diese Roadmap irgendwo veröffentlicht? Nur neugierig. –

+0

Es ist nicht. Wir sprechen im Allgemeinen nicht über zukünftige Merkmale, da Dinge unerwartet auftreten können, die Prioritäten (oder sogar Machbarkeit) verändern. –

+2

@DanMcGrath Gibt es ein Update für dieses Feature/Roadmap? –

0

ist ein bisschen Expansion auf die Antwort, wie einige verwirrt zu sein scheinen, um mit Indizes für jeden Schlüssel zu machen, Firestore bereits indiziert Ihre Daten für einfache Abfragen so können Sie eine einfache Abfrage tun wie

documentReference.where('param','==','value').onSnapshot(...) 

Sie können jedoch keine zusammengesetzte Abfrage ausführen, wenn Sie Ihre Daten für diese Parameter nicht indizieren. Sie würden also Indizes müssen in der Lage sein, so etwas zu tun:

documentReference.where('param','==','value').where(..otherparams...).onSnapshot(...) 

Also, solange Sie die Fotos für eine ID benötigen, können Sie sie als

usersCollection :      (a collection) 
    uidA:        (a document) 
     photoField:      (a field value that is a map or object) 
      fieldID1 : true    (a property of the photoField) 
      fieldID2 : true    (a property of the photoField) 
      etc ... 

speichern und Sie können einfach Benutzer abfragen (s), die, sagen wir, fieldID1 in ihrem photoField haben, ohne einen Index und eine ähnliche Abfrage bilden zu müssen.

firestore.doc('usersCollection/uidA').where('photoField.fieldID1','==',true).onSnapshot(...) 
Verwandte Themen