Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase Firestore multiple queries

Hi, I'm trying to add a filter on top of a query, however, it's not working. It's causing useless repetition in the code. Can someone help me?

Is there a way to add more .whereField to an existant Ref?

Thanks! William

        var usersRef:Query

    if (DAgeMin == DAgeMax) {
        if (DGender == "Both") {
            usersRef = Firestore.firestore().collection("users")
                .whereField("AccountCompleted", isEqualTo: true)
                .whereField("Banned", isEqualTo: 0)
                .whereField("Age", isEqualTo: DAgeMin as Any)
            // usersRef.limit(to: 1)
        } else {
            usersRef = Firestore.firestore().collection("users")
                .whereField("AccountCompleted", isEqualTo: true)
                .whereField("Banned", isEqualTo: 0)
                .whereField("Gender", isEqualTo: DGender as Any)
                .whereField("Age", isEqualTo: DAgeMin as Any)
            // usersRef.limit(to: 1)
        }
    } else {
        if (DGender == "Both") {

            usersRef = Firestore.firestore().collection("users")
            // Not working, filters aren't being applied
                usersRef
                .whereField("AccountCompleted", isEqualTo: true)
                .whereField("Banned", isEqualTo: 0)
                .whereField("Age", isGreaterThanOrEqualTo: DAgeMin as Any)
                .whereField("Age", isLessThanOrEqualTo: DAgeMax as Any)


            // usersRef.limit(to: 1)
        } else {
            usersRef = Firestore.firestore().collection("users")
                .whereField("AccountCompleted", isEqualTo: true)
                .whereField("Banned", isEqualTo: 0)
                .whereField("Gender", isEqualTo: DGender as Any)
                .whereField("Age", isGreaterThanOrEqualTo: DAgeMin as Any)
                .whereField("Age", isLessThanOrEqualTo: DAgeMax as Any)
            // usersRef.limit(to: 1)

        }
    }
    // How can I apply this filter to all the usersRef, without putting it after each "block"
    usersRef.limit(to: 1)


    usersRef.getDocuments() { (querySnapshot, err) in
like image 876
William B Avatar asked Sep 14 '26 22:09

William B


1 Answers

I ran into a similar problem in javascript. I'm not familiar with swift so the syntax will be different but hopefully it can help you too.

const userRef = firebase.firestore().collection("users");
var query = userRef.where("AccountCompleted", "==", true);


if (condition) {
    query = query.where("color", "==", "red");
}
else {
    query = query.where("color", "==", "blue");
}


if (differentCondition) {
    query = query.where("number", "==", 10);
}
else {
    query = query.where("number", "==", 12);
}


query = query.limit(1);

This allowed me to chain different where() methods depending on the conditions and then you could add the limit() method after you finished building your query.

like image 166
imsucks Avatar answered Sep 17 '26 14:09

imsucks