2017-10-16 1 views
1

J'ai défini mon schéma comme suit.Rechercher une requête Firebase avec un tableau de clés uniques

enter image description here

Maintenant, je veux envoyer une chaîne chinohills7leavescafe101191514.19284 et que vous voulez vérifier s'il y a une chaîne dans la Chino Hills ou non. Je suis confus pour faire une requête de recherche parce que je n'ai pas stocké la chaîne ci-dessus dans fixe childKey Je sais que le schéma devrait être comme ça, mais je ne peux pas changer le schéma.

leaves-cafe 
    codes 
     Chino Hills 
      -Kw0ZtwrPjyNh1_HJrkf 
       codeValue: "chinohills7leavescafe101191514.19284" 
+0

S'il vous plaît montrer un code que vous avez essayé et également montrer la structure développée de «Chino Hills» toute clé enfant? – 3stud1ant3

Répondre

2

Vous recherchez queryOrderedByValue. Il fonctionne de la même manière que queryOrderedByChild et vous permet d'utiliser queryEqualToValue pour obtenir le résultat dont vous avez besoin puisque vous ne pouvez pas modifier votre schéma actuel.

Voici un exemple

// warning: untested code - just illustrating queryOrderedByValue 

let ref = Database.database().reference().child("leaves-cafe").child("codes").child("Chino Hills") 
let queryRef = ref.queryOrderedByValue().queryEqual(toValue: "chinohills7leavescafe101191514.19284") 

queryRef.observeSingleEvent(of: .value, with: { (snapshot) in 
    if snapshot.exists() { 
     print("value does exists") 
    } else { 
     print("value doesn't exist") 
    } 
}) 

Votre option alternative est de itérer sur tous les nœuds et vérifier si la valeur existe manuellement 3stud1ant3 suggéré. Cependant, notez que cette approche est à la fois coûteuse et un risque de sécurité. Vous téléchargeriez potentiellement beaucoup de données, et généralement vous ne devriez pas charger de données inutiles (en particulier s'il s'agit d'informations sensibles, ne sachant pas si c'est votre cas) sur l'appareil; c'est l'équivalent du téléchargement de tous les mots de passe d'une base de données pour vérifier si le mot saisi correspond à celui d'un utilisateur donné.