Par exemple, j'ai un filtre dynamique pour ma liste de livres où je peux définir une couleur, des auteurs et des catégories spécifiques. Ce filtre peut définir plusieurs couleurs à la fois et plusieurs catégories.
Book > Red, Blue > Adventure, Detective.
Comment ajouter conditionnellement "où"?
firebase
.firestore()
.collection("book")
.where("category", "==", )
.where("color", "==", )
.where("author", "==", )
.orderBy("date")
.get()
.then(querySnapshot => {...
Comme vous pouvez le voir dans la documentation de l'API, la méthode collection () renvoie un CollectionReference . CollectionReference étend Requête . Query.where () et Query.orderBy () renvoient également des objets Query. Vous pouvez donc réécrire votre code comme ceci:
var query = firebase.firestore().collection("book")
query = query.where(...)
query = query.where(...)
query = query.where(...)
query = query.orderBy(...)
query.get().then(...)
Vous pouvez maintenant mettre des conditions pour déterminer les filtres que vous souhaitez appliquer à chaque étape.
En plus de la réponse de @Doug Stevenson. Lorsque vous avez plus d'un where
il faut le rendre plus dynamique comme dans mon cas.
function readDocuments(collection, options = {}) {
let {where, orderBy, limit} = options;
let query = firebase.firestore().collection(collection);
if (where) {
if (where[0] instanceof Array) {
// It's an array of array
for (let w of where) {
query = query.where(...w);
}
} else {
query = query.where(...where);
}
}
if (orderBy) {
query = query.orderBy(...orderBy);
}
if (limit) {
query = query.limit(limit);
}
return query
.get()
.then()
.catch()
}
// Usage
// Multiple where
let options = {where: [["category", "==", "someCategory"], ["color", "==", "red"], ["author", "==", "Sam"]], orderBy: ["date", "desc"]};
//OR
// A single where
let options = {where: ["category", "==", "someCategory"]};
let documents = readDocuments("books", options);