web-dev-qa-db-fra.com

Exécution OR dans la requête Firestore - Firebase Firestore

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.

16
Noman Ali

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.

12
Sam Stern

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))
}
0
phicon