javascript - 如何在云函数中使用 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
}
}]
但我正在检索空响应而没有任何错误。
解决方案
您的数据结构包含两个嵌套级别:
- 你有一个数组
- 在第一个数组元素内,你有
config1
和config2
如果您查看 Firebase 控制台,您会看到这一点,您的数据将显示如下:
{
"config" : {
"0": {
"config1" : {
"hideimage" : true
}
},
{
"config2" : {
"hideimage" : false
}
}
}
}
Firebase 只能查询平面列表中的节点,而不是树。因此,使用您当前的数据结构,它只能找到hideimage=true
under的节点/config/0
,而不是所有/config
子节点。
既然你已经命名了你的config1
和config2
唯一的,我认为数组可能是一个错误,你真的在寻找:
{
"config": {
"config1" : {
"hideimage" : true
},
"config2" : {
"hideimage" : false
}
}
}
使用此数据结构,您的查询将起作用。