如何使用Cloud函数中的indexOn从实时数据库检索数据

时间:2018-10-10 05:52:25

标签: javascript firebase firebase-realtime-database google-cloud-functions

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
  }
}]

但是我正在获取一个空响应而没有收到任何错误。

1 个答案:

答案 0 :(得分:2)

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

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

如果您查看Firebase控制台,您会看到此信息,数据将显示如下:

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

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

由于您已经唯一地命名了config1config2,所以我认为该数组可能是一个错误,并且您确实在寻找:

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

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