您好,我正在尝试在查询之上添加过滤器,但是它不起作用。它导致代码中无用的重复。有人可以帮助我吗?
有没有办法向现有 Ref 添加更多 .whereField?
谢谢! 威廉
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
最佳答案
我在 javascript 中遇到了类似的问题。我不熟悉 swift,所以语法会有所不同,但希望它也能对你有所帮助。
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);
这允许我根据条件链接不同的 where() 方法,然后您可以在完成查询构建后添加 limit() 方法。
关于ios - Firebase Firestore 多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47647507/