查询后的 Firebase Admin 数据库快照数据?
Firebase Admin Database Snapshot Data After Query?
设置
让我们假设这是我的 JSON 数据
values: {
a: {
randomValue: "set",
sorter: 1
},
b: {
randomValue: "hat",
sorter: 2
}
}
我可以像这样使用管理数据库(来自 Cloud Functions)从我的数据库中检索数据
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
!为什么会这样?
我认为在这种情况下您需要以 snapshot.val().a.randomValue
的形式访问这些字段。请注意,您正在 运行 查询 values
节点,而不是 values/a
节点。因此,您的结果包含 a
属性.
更新
当您 运行 查询 values
节点,并订阅 value
event (which is what once()
method does internally), you get the full value (parent key + child) of the query. To get only the child, you need subscribe to a 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
设置
让我们假设这是我的 JSON 数据
values: {
a: {
randomValue: "set",
sorter: 1
},
b: {
randomValue: "hat",
sorter: 2
}
}
我可以像这样使用管理数据库(来自 Cloud Functions)从我的数据库中检索数据
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
!为什么会这样?
我认为在这种情况下您需要以 snapshot.val().a.randomValue
的形式访问这些字段。请注意,您正在 运行 查询 values
节点,而不是 values/a
节点。因此,您的结果包含 a
属性.
更新
当您 运行 查询 values
节点,并订阅 value
event (which is what once()
method does internally), you get the full value (parent key + child) of the query. To get only the child, you need subscribe to a 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