我可以使用电子邮件地址查询我的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
之间。
答案 0 :(得分:31)
你可以这样做:
var key = Object.keys(snapshot.val())[0];
参考:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
Object.keys()方法返回给定对象自己的数组 可枚举的属性,与a提供的顺序相同 for ... in循环(不同之处在于for-in循环枚举 原型链中的属性也是如此。
答案 1 :(得分:16)
实时数据库:
为此您可以简单地使用: 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];
}
});
答案 2 :(得分:4)
与camden_kid类似,我使用Object.keys(arr)
,但有三行:
var arr = snapshot.val();
var arr2 = Object.keys(arr);
var key = arr2[0];
console.log(key) // -KiBBDaj4fBDRmSS3j0r
答案 3 :(得分:1)
users.orderByChild('email').equalTo(authData.user.email)
是一个查询(doc),您通过“将一个或多个过滤方法链接在一起”构建。您查询的具体内容是它返回的数据快照只有一个子,因为您使用equalTo(authData.user.email)
进行查询。
正如here所解释的那样,在这种情况下,您应该使用forEach()
循环返回的dataSnapshot:
将值观察器附加到数据列表会将整个数据列表作为单个快照返回,然后您可以循环访问这些快照以访问各个子项。
即使查询只有一个匹配项,快照也是如此 还是一个清单;它只包含一个项目。要访问该项目, 您需要遍历结果,如下所示:
ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });
答案 4 :(得分:0)
我发现了一种基于快照密钥获取数据的新方法-
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);
})
})