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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With