Home > Enterprise >  Check for existence of value in firebase realtime database?
Check for existence of value in firebase realtime database?

Time:02-25

I'm using V9 (modular) version of Firebase realtime database. I have a list of URLs with auto-generated keys using push(). This is the data structure.

enter image description here

What I want is to check for the existence of one of these url's in the list. Here's what I've attempted.

    const testURL = "https://i.redd.it/bm6psl9sgsj81.png"; //First one in the list
    const db = getDatabase();
    const dbRef = ref(db, "burnedURLs/");
    const q = query(dbRef, equalTo(testURL));
    const snapshot = await get(q);
    const results = snapshot.toJSON();
    console.log(results); //Returns NULL

How does one check the existence of a value, or just retrieve a value when you don't know the key? The documentation for V9 isn't very good and most examples I've found are for V8. Thanks for any help.

Edit: Using exists() returns false when it does exist (It's the first child in the tree). I think the issue is that I'm not forming the query correctly and that's what I need help with.

CodePudding user response:

The get(<query>) returns a DataSnapshot that still has exists() which returns true if this DataSnapshot contains any data.:

const q = query(dbRef, orderByValue(), equalTo(testURL));

const snapshot = await get(q);

if (snapshot.exists()) {
  const results = snapshot.val();
  console.log('Results', results)
} else {
  console.log('Data does not exist')
}

From the documentation,

To filter data, you can combine any of the limit or range methods with an order-by method when constructing a query.

So adding orderByValue() in query should solve the issue.

CodePudding user response:

Also you can use the empty and hasChildren methods.

As they show on their docs:

// Assume we have the following data in the Database:
{
  "name": {
    "first": "Ada",
    "last": "Lovelace"
  }
}

var ref = firebase.database().ref("users/ada");
ref.once("value")
  .then(function(snapshot) {
    if(!snapshot.empty){ //this one return a boolean value like exists
      var a = snapshot.hasChildren(); // true
      var b = snapshot.child("name").hasChildren(); // true
      var c = snapshot.child("name/first").hasChildren(); // false
    }
  });
  • Related