【问题标题】:Firebase Firestore multiple queriesFirebase Firestore 多个查询
【发布时间】:2018-05-18 18:04:54
【问题描述】:

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

有没有办法将更多的 .whereField 添加到现有的 Ref 中?

谢谢! 威廉

        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

【问题讨论】:

    标签: ios swift xcode firebase google-cloud-firestore


    【解决方案1】:

    我在 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() 方法。

    【讨论】:

    • 如果我被允许,我会给你五票赞成这个答案。
    【解决方案2】:

    你必须在你的'ifs'之外设置通用的'whereField',在你的'ifs'里面你必须设置特定的'whereField'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多