web-dev-qa-db-de.com

Google Firebase prüfen, ob ein Kind vorhanden ist

In meiner App muss ich überprüfen, ob ein bestimmtes Element meiner Datenbank in Firebase ein Kind mit einem bestimmten Namen enthält. Ich hoffte, dass es möglich war, etwas zu verwenden, das den folgenden Zeilen entsprach:

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

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

Ich suchte, aber ich konnte nichts Nützliches finden.

27
zomnombom

Edit 2; Es lohnt sich, an die Spitze zu setzen: Ich denke, es ist erwähnenswert, dass hier tatsächlich alle Daten zu diesem Schnappschuss heruntergeladen werden, nur um zu prüfen, ob Daten vorhanden sind. Sie sollten hier bedacht sein. Wenn die Referenz sehr groß ist (z. B. tatsächlich die Wurzelreferenz und nicht ein bestimmtes untergeordnetes Element/eine bestimmte Eigenschaft), sollten Sie entweder einen tieferen Knoten finden, mit dem Sie nach Existenz suchen können, oder Ihre Datenstruktur anders gestalten, um eine effiziente Überprüfung zu ermöglichen ist möglich.

Eine Datenbankreferenz ist effektiv die URL für diese Daten. Sie möchten tatsächlich get data, um zu sehen, ob ein Kind existiert. Aus diesem Grund ist die Methode, die Sie zu suchen scheinen, auf DataSnapshot .

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

Jetzt fühlt sich dieses Entwurfsmuster etwas seltsam an. Sie lesen die gesamte Datenbank, nur um zu sehen, ob "Name" existiert. Sie können dies ein wenig effizienter machen, indem Sie sich rootRef.child("name") anhören und dann nur prüfen, ob snapshot.exists().

Wenn Sie versuchen, Validierung hier auszuführen und nicht den Ablauf zu steuern, sollten Sie diesen Code in Ihren rules.json einfügen.

edit: Ich habe ursprünglich den falschen Funktionsnamen verwendet (childExists anstelle von hasChild)

60
Thomas Bouldin

Mach das nicht so

NIE

Es nimmt alle Ihre Daten und bringt sie auf das Gerät

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

Überprüfen Sie es auf diese Weise. Wenn vorhanden, wird der Wert des untergeordneten Elements zurückgegeben, andernfalls -> null

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("childName")
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.getValue() == null) {
      // The child doesn't exist
    }
  }
});

Versuchen Sie, .childexists in Kombination mit .equalTo("Your specific name") zu verwenden. 

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

Verwenden Sie snapshot.exists (), um zu überprüfen, ob der referenzierte Datenbankeintrag ein untergeordnetes Element enthält, unabhängig vom Wert des untergeordneten Elements.

0
John yepthomi