Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase deep querying

This question is about implementing firebase deep querying. Consider the following structure in firebase:

enter image description here

Here, my ref is pointing to the root of the structure which is /messages. So I have :

var ref = new Firebase("https://cofounder.firebaseio.com/messages");

I wish to query those message Id's having member = -752163252 . So basically the returned object should be the one with key 655974744 . How do I go about doing this in firebase?

Here's what I tried in my console:

ref.orderByChild("members").equalTo(235642888).on('value', function(snap){console.log("Found ",snap.val())});

Result was:

VM837:2 Found  null

I sense there is a missing link somewhere. Basically, I want to know if there is any way to query the deep nested data without having the parent key id's (in this case 25487894,655974744) .

Also, if I may extend my question, is there a way to add a listener that calls back when a new messageId (in this case 25487894,655974744) is added containing member = -752163252 .

Hope my question is clear enough. Any help is greatly appreciated!

EDIT:

I have already looked at the dinosaurs example, and that's how I tried what I tried but it didn't work.

like image 561
Rohan Dalvi Avatar asked Feb 24 '16 19:02

Rohan Dalvi


People also ask

What query language does Firebase use?

js (client) API reference | Firebase.

What is limitToLast method in Firebase?

The limitToLast() method is used to set a maximum number of children to be synced for a given callback. If we set a limit of 100, we will initially only receive up to 100 child_added events. If we have less than 100 messages stored in our database, a child_added event will fire for each message.

Is Firebase good for large database?

Yes, firebase is very fast. I would recommend the firestore database over the realtime one in terms of indexing and linking data. The challenge will come on how your app will handle that large data, and measures you will take for the app to perform at its best.


1 Answers

Your query asserts that the "members" node is an integer with value 235642888, which it is not, naturally. It's an object containing a list of keys.

Instead, you would want to use the deep child query syntax and something like the following:

ref.orderByChild("members/235642888").equalTo(235642888);

Note that you don't really need the value of the key to be the key itself. You could save storage by just setting this to a binary true or 1. The query would be much the same:

ref.orderByChild("members/235642888").equalTo(true);
like image 152
Kato Avatar answered Sep 22 '22 23:09

Kato