De les docs :
Vous pouvez également chaîner plusieurs méthodes where () pour créer des requêtes plus spécifiques (AND logique).
Comment effectuer une requête OR
? Exemple:
status
est open
OR upcoming
status == open
OR createdAt <= <somedatetime>
OR
n'est pas pris en charge car il est difficile pour le serveur de la mettre à l'échelle (nécessite de conserver l'état pour la dédu). La solution consiste à émettre deux requêtes, une pour chaque condition, et une déduction sur le client.
Je n'aurais pas de champ "status", mais des champs liés au statut, les mettant à jour en true ou false sur demande
{ name: "a", status_open: true, status_upcoming: false, status_closed: false}
Cependant, vérifiez les fonctions de Cloud Firebase. Vous pouvez modifier l’état d’écoute d’une fonction et mettre à jour les propriétés liées à l’état telles que
{ name: "a", status: "open", status_open: true, status_upcoming: false, status_closed: false}
l'un ou l'autre, votre requête pourrait être juste
...where('status_open','==',true)...
J'espère que ça aide.
vous pouvez lier deux observables à l'aide de l'opérateur de fusion rxjs . Vous avez ici un exemple.
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/merge';
...
getCombinatedStatus(): Observable<any> {
return Observable.merge(this.db.collection('foo', ref => ref.where('status','==','open')).valueChanges(),
this.db.collection('foo', ref => ref.where('status','==','upcoming')).valueChanges());
}
Ensuite, vous pouvez vous abonner aux nouvelles mises à jour Observable en utilisant la méthode ci-dessus:
getCombinatedStatus.subscribe(results => console.log(results);
J'espère que cela pourra vous aider, salutations du Chili !!
suggère de donner une valeur au statut aussi.
ex.
{ name: "a", statusValue = 10, status = 'open' }
{ name: "b", statusValue = 20, status = 'upcoming'}
{ name: "c", statusValue = 30, status = 'close'}
vous pouvez interroger par ref.where('statusValue', '<=', 20)
puis 'a'
et 'b'
seront trouvés.
cela peut économiser les coûts et les performances de votre requête.
par ailleurs, il n'est pas résolu tous les cas.