Google firebase check if child exists

zomnombom picture zomnombom · May 23, 2016 · Viewed 81.1k times · Source

In my app, I need to check if a given element of my database on firebase has a child with a given name. I hoped it could be done by using something along the lines of:

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

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

I searched but I couldn't find anything useful.

Answer

Thomas Bouldin picture Thomas Bouldin · May 24, 2016

Edit 2; worth putting on top: I think it is worth mentioning that this is actually downloading all data at this snapshot just to check whether any data exists. You should be mindful here. If the reference is huge (e.g. actually the root reference and not a specific child/property) then you should either find a deeper node you can use to check for existence or design your data structure differently so an efficient check is possible.

A database reference is effectively the URL for that data. You want to actually get data to see whether a child exists. This is why the method you seem to be looking for is on DataSnapshot.

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

Now, this design pattern feels a bit strange. You're reading the whole database just to see whether "name" exists. You can make this a bit more efficient by listening to rootRef.child("name") and then just checking whether snapshot.exists().

If you're trying to do validation here, and not control flow, you should consider putting this code in your rules.json.

edit: I originally used the wrong function name (childExists instead of hasChild)