2017-12-05 9 views
1

Hallo, ich versuche, einen Filter über eine Abfrage hinzufügen, aber es funktioniert nicht. Es verursacht unnötige Wiederholungen im Code. Kann mir jemand helfen?Firebase Firestore mehrere Abfragen

Gibt es eine Möglichkeit, mehr .whereField zu einer vorhandenen Ref hinzufügen?

Danke! 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 

Antwort

0

Ich lief in ein ähnliches Problem in Javascript. Ich bin nicht vertraut mit swift, so dass die Syntax wird anders sein, aber hoffentlich kann es Ihnen auch helfen.

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); 

Das erlaubte mir, an die Kette unterschiedliche wo (Methoden) abhängig von den Bedingungen und dann könnte man die Grenze() -Methode hinzufügen, nachdem Sie Ihre Abfrage Bau fertig.

+0

Wohoooo setzen müssen! Genau das, was ich brauchte, danke! –

0

Sie die gemeinsame setzen müssen ‚whereField‘ außerhalb ‚ifs‘, und in Ihrem ‚ifs‘ Sie die besondere ‚whereField‘

Verwandte Themen