首页 > 解决方案 > 如何在云函数中使用 indexOn 从实时数据库中检索数据

问题描述

Firebase 结构:

{
  "config" : [
    {
      "config1" : {
        "hideimage" : true
      }
    },
    {
      "config2" : {
        "hideimage" : false
      }
    }
  ]
}

数据库规则:

"config": {
  ".indexOn": ["hideimage"]
}

我正在尝试使用以下方法检索所有将 hideimage 属性设置为 true 的配置项:

 admin.database().ref('config').orderByChild("hideimage").equalTo(true).once('value', result => {});

预期的结果应该是:

[{
  "config1" : {
    "hideimage" : true
  }
}]

但我正在检索空响应而没有任何错误。

标签: javascriptfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


您的数据结构包含两个嵌套级别:

  1. 你有一个数组
  2. 在第一个数组元素内,你有config1config2

如果您查看 Firebase 控制台,您会看到这一点,您的数据将显示如下:

{
  "config" : {
    "0": {
      "config1" : {
        "hideimage" : true
      }
    },
    {
      "config2" : {
        "hideimage" : false
      }
    }
  }
}

Firebase 只能查询平面列表中的节点,而不是树。因此,使用您当前的数据结构,它只能找到hideimage=trueunder的节点/config/0而不是所有/config子节点。

既然你已经命名了你的config1config2唯一的,我认为数组可能是一个错误,你真的在​​寻找:

{
  "config": {
    "config1" : {
      "hideimage" : true
    },
    "config2" : {
      "hideimage" : false
    }
  }
}

使用此数据结构,您的查询将起作用。


推荐阅读