ios - Firebase Firestore 多个查询

标签 ios swift xcode firebase google-cloud-firestore

您好,我正在尝试在查询之上添加过滤器,但是它不起作用。它导致代码中无用的重复。有人可以帮助我吗?

有没有办法向现有 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/

相关文章:

ios - 如何配合swift/xctest点击iOS主屏幕上的某个点

ios - 如何将按钮添加到选项卡栏 Controller

ios - 为大多数用户 IAP 获取 "Cannot connect to iTunes Store"

Xcode 文档注释语法

ios - SQLite、CoreData 还是静态数据?

ios - UICollectionView 的分页

iOS:cocoa Pods:如何向现有 pod 添加新的依赖项?

Swift 4.2,Xcode Playground 中的 String firstIndex() 函数错误

ios - UITableviewCell layoutSubviews 滑动删除时调用了几次

ios - Swift:MPC:浏览器如何才能看到附近的所有广告商?