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.
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
}
});