3

Here is my Fireabse database structure. I want to retrieve data of 20170116 keys that is not a hard coded value. It's dynamic keys. I got some keys and values like :

This is my funtion :

function getData(prospectId) {
    database.ref('users/'+prospectId).once('value').then(function(snapshot) {
        var prospectId = snapshot.key ;
        console.log("prospectId : "+ prospectId); // output is : prospectId : 1104812

        snapshot.forEach(function(childSnapshot) {
            var businessUrl = childSnapshot.key;
            console.log("businessUrl : "+ businessUrl); // output is : businessUrl : http:\\www.abc.com
            var dates = Object.keys(childSnapshot.val());
            console.log("dates : "+ dates); //output is : dates : 20170116,20170117,20170119,20170121
            var singleDate = dates[0];
            console.log("singleDate : "+ singleDate); //output is : singleDate : 20170116
        });
    });
}  

getData(1104812);

Here is my Fireabse database structure

So how to get 20170116 date data or snapshot ?

1
  • Educated guess below. If that's not it (and for future questions) please replace the picture of JSON with the actual JSON as text, which you can easily get by clicking the Export JSON link in your Firebase Database console. Having the JSON as text makes it searchable, allows us to easily use it to test with your actual data and use it in our answer and in general is just a Good Thing to do. Commented Jan 28, 2017 at 18:32

1 Answer 1

5

You're attaching a value listener to /users/1104812. So the snapshot you get in your callback will contain the child nodes under that: 20170116, 20170117 and 20170119.

When you loop over the children (with snapshot.forEach(function() your childSnapshot will become each of those nodes in turn.

None of these nodes has a child clientUrl or districtId, those are one level deeper into the tree:

database.ref('users/'+prospectId).once('value').then(function(snapshot) {
  var prospectId = snapshot.key ;

  snapshot.forEach(function(snapshot1) {
    console.log(snapshot1.key); // e.g. "http://..."
    snapshot.forEach(function(snapshot2) {
      console.log(childSnapshot.key); // e.g. "20170116"
      childSnapshot.forEach(function(snapshot3) {
        console.log(grandchildSnapshot.key); // e.g. "-Kb9...gkE"
        console.log(grandchildSnapshot.val().districtId); // "pne"
      });
    });
  });
});
Sign up to request clarification or add additional context in comments.

2 Comments

whatever you written in the code I have logged the value and its printed undefined. Here console.log(childSnapshot.key) this line is printed http:\\www..., console.log(grandchildSnapshot.key) this is printed 20170116, ` console.log(grandchildSnapshot.val().districtId)` this is printed undefined.
Yeah, it looks like you have yet another level around it in the JSON. I updated the code to add another block.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.