[英]How to get the key from a Firebase data snapshot?
我可以使用电子邮件地址查询我的users
数组并返回用户的帐户信息:
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'
...
我如何获得密钥( -KiBBDaj4fBDRmSS3j0r
)。 snapshot.key
返回users
。 snapshot.child('email').key
返回email
。 密钥似乎不是孩子,即它似乎在users
和email
之间。
你可以这样做:
var key = Object.keys(snapshot.val())[0];
参考: https : //developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Object.keys()方法返回给定对象自己的可枚举属性的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于for-in循环枚举原型链中的属性为好)。
实时数据库 :
为此您可以简单地使用: snapshot.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];
}
});
与camden_kid类似,我使用了Object.keys(arr)
,但有三行:
var arr = snapshot.val();
var arr2 = Object.keys(arr);
var key = arr2[0];
console.log(key) // -KiBBDaj4fBDRmSS3j0r
users.orderByChild('email').equalTo(authData.user.email)
是一个Query( doc ),它是通过“将一个或多个过滤方法链接在一起”构建的。 您查询的具体内容是它返回一个只有一个子节点的dataSnapshot ,因为您使用equalTo(authData.user.email)
查询。
正如解释在这里 ,在这个确切的情况下,你应该在循环使用返回dataSnapshot forEach()
将值观察器附加到数据列表将将整个数据列表作为单个快照返回,然后您可以循环访问以访问单个子项。
即使查询只有一个匹配项,快照仍然是一个列表 ; 它只包含一个项目。 要访问该项, 您需要循环结果 ,如下所示:
ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });
我找到了基于快照键获取数据的新方法 -
firebase.database().ref('events').once('value',(data)=>{
//console.log(data.toJSON());
data.forEach(function(snapshot){
var newPost = snapshot.val();
console.log("description: " + newPost.description);
console.log("interest: " + newPost.interest);
console.log("players: " + newPost.players);
console.log("uid: " + newPost.uid);
console.log("when: " + newPost.when);
console.log("where: " + newPost.where);
})
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.