Je suis en mesure d'interroger mon tableau users
avec une adresse de messagerie et de renvoyer les informations de compte de l'utilisateur:
users.orderByChild('email').equalTo(authData.user.email).once('value').then(function(snapshot) {
console.log(snapshot.val());
console.log(snapshot.key); // 'users'
console.log(snapshot.child('email').key); 'email'
...
Comment puis-je obtenir la clé (-KiBBDaj4fBDRmSS3j0r
). snapshot.key
renvoie users
. snapshot.child('email').key
renvoie email
. La clé ne semble pas être un enfant, c’est-à-dire qu’elle semble être entre users
et email
.
Vous pouvez faire quelque chose comme ça:
var key = Object.keys(snapshot.val())[0];
Réf.: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
La méthode Object.keys () renvoie un tableau du propre objet propriétés énumérables, dans le même ordre que celui fourni par un for ... en boucle (la différence étant qu'une boucle for-in énumère également les propriétés de la chaîne de prototypes).
Base de données en temps réel:
Pour cela, vous pouvez utiliser simplement: instantané.key
snapshot = firebase.database.DataSnapshot
this.app.database()
.ref('/data/')
.on('value', function(snapshot) {
const id = snapshot.key;
//----------OR----------//
const data = snapshot.val() || null;
if (data) {
const id = Object.keys(data)[0];
}
});
Firestore:
snapshot.id
snapshot = firebase.firestore.DocumentSnapshot
this.app.firestore()
.collection('collection')
.doc('document')
.onSnapshot(function(snapshot) {
const id = snapshot.id;
//----------OR----------//
const data = snapshot.data() || null;
if (data) {
const id = Object.keys(data)[0];
}
});
Comme pour camden_kid, j’ai utilisé Object.keys(arr)
, mais en trois lignes:
var arr = snapshot.val();
var arr2 = Object.keys(arr);
var key = arr2[0];
console.log(key) // -KiBBDaj4fBDRmSS3j0r
users.orderByChild('email').equalTo(authData.user.email)
est une requête ( doc ) que vous avez construite en "chaînant ensemble une ou plusieurs des méthodes de filtrage". Ce qui est un peu spécifique avec votre requête, c'est que il retourne un dataSnapshot avec un seul enfant, puisque vous interrogez avec equalTo(authData.user.email)
.
Comme expliqué ici , dans ce cas précis, vous devez parcourir le dataSnapshot renvoyé avec forEach()
:
Si vous associez un observateur de valeurs à une liste de données, la liste complète des données sera renvoyée sous la forme d'un instantané unique que vous pourrez ensuite parcourir pour accéder à des enfants individuels.
Même s'il n'y a qu'une seule correspondance pour la requête, l'instantané est encore une liste; il ne contient qu'un seul élément. Pour accéder à l’article, vous devez parcourir le résultat, comme suit:
ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });