首页 > 解决方案 > 如何在不检索密钥的情况下检索 Firebase 子数据?

问题描述

我目前正在尝试在没有数组键的情况下获取子数据,以便可以将其添加到我的 redux 状态。

ref.orderByChild(`userId`).equalTo(googleUserInfo[0].userId).once('value', streamSnapshot => {
        if (streamSnapshot.exists()) {
          googleUserInfo[0] = (streamSnapshot.val())
        }

目前这返回

[{…}]0: {-LbJneodI2SaUglB6fwx: {…}}length: 1__proto__: Array(0)

但我想要这个

[{…}]
0:
{
displayName: "Seth Jones"
userAvi: "https://lh6.googleusercontent.com/-RABcz3kK1ew/AAAAAAAAAAI/AAAAAAAAAAA/ACHi3rfzHCLV9A7LfiGWKtTOuq5rJmtQpg/s96-c/photo.jpg"
userEmail: "xxxx@gmail.com"
userFirstName: "Seth"
userId: "103977654052015523435"
userLastName: "Jones"
}

标签: javascriptfirebasefirebase-realtime-database

解决方案


当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您需要遍历结果,以获取各个值:

ref.orderByChild('userId').equalTo(googleUserInfo[0].userId).once('value', streamSnapshot => {
    streamSnapshot.forEach((child) => {
      googleUserInfo[0] = (child.val())
    });

推荐阅读