J'essaie d'implémenter l'opérateur logique OR dans une requête de mémoire de stockage.
db.collection('users').where('company_id', '==', companyId)
.where('role', '==', 'Maker')
.where('role', '==', 'Checker')
.where('role', '==', 'Approver')
.get().then(function(adminsSnapshot){
//Some processing on dataSnapshot
})
Mais ce n’est pas la bonne façon de mettre en œuvre le OU.
Je veux tous les utilisateurs avec des rôles de "Maker, Checker ou Approver".
Comment implémenterais-je OR dans une requête de stockage? Il n'y a rien dans Doc.
Il n'y a pas de requête "OU" dans Cloud Firestore. Si vous voulez y parvenir en une seule requête, vous aurez besoin d'un seul champ tel que maker_or_checker_or_approver: true
.
Bien sûr, vous pouvez toujours faire trois requêtes et les joindre sur le client.
Vous pouvez combiner les observables à l’aide de rxjs, voir l’exemple ci-dessous (6);
orQuery(){
const $one = this.afs.collection("users", ref => ref.where("company_id","==","companyId")).valueChanges();
const $two = this.afs.collection("users", ref => ref.where("role","==","Maker")).valueChanges();
return combineLatest($one,$two).pipe(
map(([one, two]) => [...one, ...two])
)
}
getOr(){
this.orQuery().subscribe(data => console.log(data))
}