2017-10-15 3 views
2

Ich erstelle eine Sammlung namens "Bücher", in dem ich ein Objekt (aka. Dict) namens "Benutzer". Dieses Objekt sieht so aus:Frage Firestore Sammlung nach Objekt

Jetzt möchte ich alle Bücher abfragen, die zu einem bestimmten Benutzer gehören. Ich versuchte dies:

this.db 
    .collection('books') 
    .where(`users.${this.state.currentUser.uid}`, '>', 0) 
    .onSnapshot(querySnapshot => { 
     ... 

ich nie irgendwelche Dokumente zurückgegeben. Ich bin mir sicher, dass da etwas ist, das es zusammenbringen sollte.

screenshot of Firestore console

meine geistige Gesundheit überprüfen, ob ich die where(...) Teil entfernen, ich Dokumente zu tun bekommen. Nur dass ich Dokumente für alle Benutzer bekomme.

Ich Konsole protokolliert diese Zeichenfolge in der .where() und es sieht richtig aus.

+0

Als eine kurzfristige Lösung Schleife ich über alle Dokumente und vergleichen Sie jede 'doc.data(). Benutzer'. Aber es ist keine gute Lösung. –

Antwort

1

Ich kann dies entweder mit .where() arbeiten nicht, aber es scheint .orderBy() mit zu arbeiten, zu ersetzen:

.where(`users.${this.state.currentUser.uid}`, '>', 0) 

mit

.orderBy(`users.${this.state.currentUser.uid}`) 
2

Sie sind Abfrage ist falsch, weil Sie Vergleichen eines Datumsobjekts mit einer Zahl, also zwei verschiedene Dinge. Sie können es überprüfen, indem Sie diese zwei Codezeilen unten ausführen.

console.log(typeof(firebase.firestore.FieldValue.serverTimestamp())) 
    console.log(typeof(0)) 

So haben Sie zwei Möglichkeiten:

1 - Sie können wie unten Datumsobjekte mit Datenobjekten vergleichen.

this.db 
    .collection('books') 
    .where(`users.${this.state.currentUser.uid}`, '>', new Date(0)) 
    .onSnapshot(querySnapshot => { 
     ... 

2 - Oder Sie können Ihr Datum in Millisekunden speichern und mit einer Zahl vergleichen.

users: { 
    5PPCTcdHOtdYjGFr7gbCEsiMaWG3: new Date().getTime(); 
} 

this.db 
     .collection('books') 
     .where(`users.${this.state.currentUser.uid}`, '>', 0) 
     .onSnapshot(querySnapshot => { 
      ... 
Verwandte Themen