web-dev-qa-db-fra.com

Comment récupérer des données de la base de données Firebase?

J'essaie de créer un programme simple qui prend le nom, le numéro de téléphone mobile et l'adresse de messagerie de l'utilisateur, puis place les données dans la base de données Firebase Realtime.

Il y a 3 zones de saisie et un bouton permettant d'effectuer l'opération ci-dessus. Voici le code:

<input type="text" id="name">
<input type="text" id="mobile">
<input type="text" id="email">

<button type="button" id="button" onclick="addLead()">Submit</button>

J'ai mis en place Firebase comme ceci:

<script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script>
<script>
  // Initialize Firebase
  var config = {
    ...
  };
  firebase.initializeApp(config);

  var database = firebase.database();
</script>

Et voici ma fonction addLead():

function addLead() {
    var clientName = document.getElementById('name').value;
    var clientMobile = document.getElementById('mobile').value;
    var clientEmail = document.getElementById('email').value;

    var newClientKey = database.ref().child('leads').Push().key;
    database.ref('leads/'+newClientKey+'/name').set(clientName);
    database.ref('leads/'+newClientKey+'/mobile').set(clientMobile);
    database.ref('leads/'+newClientKey+'/email').set(clientEmail);
}

Voici comment je mets des données dans une base de données qui fonctionne.

enter image description here

Donc, le newClientKey génère une chaîne, cela fonctionne bien lors de l'insertion, mais maintenant, comment le récupérer? Le documentation officielle n'est d'aucune aide. Cette chaîne générée peut être basée sur un horodatage. Si c'est le cas, il serait alors impossible de la générer à nouveau.

Lors de la récupération, comment puis-je accéder aux e-mails, aux mobiles et aux noms sous cette chaîne générée de manière unique qui était uniquement disponible au moment de l'insertion?

En me basant sur la structure ci-dessus, il me faut 2 niveaux pour accéder aux données requises et à cause du manque de documentation, je ne sais pas comment faire, je ne suis pas sûr que quelque chose comme ça va marcher:

database.child().child();
23
Chinmay Sarupria

La réponse à cette question est profondément enfouie dans Firebase Référence de la base de données . forEach() est utilisé pour atteindre l'enfant sans connaître le chemin exact de celui-ci.

var leadsRef = database.ref('leads');
leadsRef.on('value', function(snapshot) {
    snapshot.forEach(function(childSnapshot) {
      var childData = childSnapshot.val();
    });
});

Maintenant, childSnapshot contiendra les données requises; vous pourrez également accéder à la même chose en utilisant child_added.

leadsRef.on('child_added', function(snapshot) {
      //Do something with the data
});

La seule différence est que, dans le cas de forEach(), il effectuera une boucle depuis le début. Ainsi, si de nouvelles données sont ajoutées, les données précédentes seront également chargées, mais dans le cas de child_added, l'auditeur est uniquement sur le nouvel enfant et non sur les enfants existants précédents.

40
Chinmay Sarupria

Vous pouvez également utiliser la notation par points pour obtenir la valeur de l'enfant que vous recherchez.

Ci-dessous, je viens de commenter la boucle forEach de la réponse la mieux notée et d’ajouter un fichier console.log ().

 var leadsRef = database.ref('leads');
  leadsRef.on('value', function(snapshot) {
      // snapshot.forEach(function(childSnapshot) {
        var childData = snapshot.node_.children_.root_.value.value_;
        console.log("snapshot.node_.children_.root_.value.value_: ", snapshot.node_.children_.root_.value.value_)
      // });
  });

Au moment de poster ceci, j'utilise firebase 5.9.1

src = "https://www.gstatic.com/firebasejs/5.9.1/firebase.js"

1
Jortega