让我们想象这是我的JSON数据
values: {
a: {
randomValue: "set",
sorter: 1
},
b: {
randomValue: "hat",
sorter: 2
}
}
我可以使用管理数据库(来自云端功能)从我的数据库中检索数据
admin.database().ref('values/a').once('value').then(snapshot => {
console.log(snapshot.val().randomValue + ' .. ' + snapshot.val().sorter);
});
输出 将为set .. 1
。
只要我向我的请求附加查询,它就会停止工作,即它不像提到的in the documentation那样有效。
他们可以明确地通过查询访问snapshot.val().height
。
虽然当我像这样做我的查询时
admin.database().ref('values').orderByChild('sorter').equalTo(1).once('value').then(snapshot => {
console.log(snapshot.val());
console.log(snapshot.val().randomValue + ' .. ' + snapshot.val().sorter);
console.log(snapshot.child('randomValue').val() + ' .. ' + snapshot.child('sorter').val());
}
输出令人惊讶是以下
a: {
randomValue: "set",
sorter: 1
}
undefined .. undefined
null .. null
所以snapshot.val()
确实向我提供了我的完整数据,但没有一种访问方式可以为我提供任何数据,只需undefined
或null
!为什么会这样?
答案 0 :(得分:3)
我认为在这种情况下您需要以snapshot.val().a.randomValue
的形式访问这些字段。请注意,您正在针对values
节点运行查询,而不是values/a
节点。因此,您的结果包含a
属性。
<强>更新强>
当您对values
节点运行查询并订阅value
event(内部是once()
方法时)时,您将获得完整值(父键+子节点) )查询。要只获得孩子,您需要订阅child event。这就是文档中的示例。例如:
admin.database().ref('values').orderByChild('sorter').equalTo(1).once('child_added').then(snapshot => {
console.log(snapshot.val());
console.log(snapshot.val().randomValue + ' .. ' + snapshot.val().sorter);
console.log(snapshot.child('randomValue').val() + ' .. ' + snapshot.child('sorter').val());
});
将产生您想要获得的输出:
{ randomValue: 'set', sorter: 1 }
set .. 1
set .. 1