繁体   English   中英

如何从Firebase数据快照获取密钥?

[英]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 密钥似乎不是孩子,即它似乎在usersemail之间。

你可以这样做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM