web-dev-qa-db-fra.com

Google firebase vérifie si l'enfant existe

Dans mon application, je dois vérifier si un élément donné de ma base de données sur firebase a un enfant avec un prénom. J'espérais que cela pourrait être fait en utilisant quelque chose comme:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

if (rootRef.childExists("name")) {
    //run some code
}

J'ai cherché mais je n'ai rien trouvé d'utile.

27
zomnombom

Edit 2; Cela vaut la peine d'être mentionné: Je pense qu'il est utile de mentionner qu'il s'agit en fait de télécharger toutes les données de cet instantané uniquement pour vérifier si des données existent. Vous devriez être conscient ici. Si la référence est énorme (par exemple, en fait la référence racine et non un enfant/propriété spécifique), vous devez trouver un nœud plus profond que vous pouvez utiliser pour vérifier l'existence ou bien concevoir votre structure de données différemment pour un contrôle efficace. est possible.

Une référence de base de données est effectivement l'URL de ces données. Vous voulez réellement obtenir données pour voir si un enfant existe. C'est pourquoi la méthode que vous semblez rechercher est sur DataSnapshot .

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.hasChild("name")) {
      // run some code
    }
  }
});

Maintenant, ce modèle de conception semble un peu étrange. Vous lisez toute la base de données juste pour voir si "name" existe. Vous pouvez rendre ceci un peu plus efficace en écoutant rootRef.child("name") et en vérifiant simplement si snapshot.exists().

Si vous essayez de faire validation ici, sans contrôler le flux, vous devriez envisager de mettre ce code dans votre rules.json.

edit: j'ai initialement utilisé un nom de fonction incorrect (childExists au lieu de hasChild)

60
Thomas Bouldin

Essayez d’utiliser .childexists en combinaison avec .equalTo("Your specific name") 

2
Rahul Shah
UsersRef = FirebaseDatabase.getInstance().getReference();   
Users.addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot snapshot) {
                                    if (snapshot.hasChild("childName")) {

                                        // it exists!
                                    }else{
                                       // does not exist
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                }
                            });
0
Arjun