如何在不知道 firebase 和 firebase-admin 中的密钥的情况下获取快照的 child
How do I get child of a snap without knowing the key in firebase and firebase-admin
我的数据库中有一个队列,如下所示:
server
queue
-RANDOM_ID_1234
active: "true"
text: "Some text"
-RANDOM_ID_5678
active: "false"
text: "Another text"
-RANDOM_ID_91011
active: "false"
text: "Text that does not matter"
我要查询并获取活动商品:
queueRef.orderByChild('active').equalTo('true').once('value', function(snap) {
if (snap.exists()) {
console.log(snap.val());
}
});
console.log
将 return 类似于:
{
-RANDOM_ID_1234: {
active: "true"
text: "Some text"
}
}
如何在不知道密钥的情况下获取文本?
我使用了 lodash(见下面我的回答),但一定有更好的方法。
我使用 lodash 并像这样获取密钥:
/*
* I get the keys of the object as array
* and take the first one.
*/
const key = _.first(_.keys(snap.val()));
然后像这样从快照中获取文本:
/*
* then I create a path to the value I want
* using the key.
*/
const text= snap.child(`${key}/text`).val();
当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
Firebase 快照具有迭代其子项的内置方法:
queueRef.orderByChild('active').equalTo('true').once('value', function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key+": "+child.val());
}
});
我的数据库中有一个队列,如下所示:
server
queue
-RANDOM_ID_1234
active: "true"
text: "Some text"
-RANDOM_ID_5678
active: "false"
text: "Another text"
-RANDOM_ID_91011
active: "false"
text: "Text that does not matter"
我要查询并获取活动商品:
queueRef.orderByChild('active').equalTo('true').once('value', function(snap) {
if (snap.exists()) {
console.log(snap.val());
}
});
console.log
将 return 类似于:
{
-RANDOM_ID_1234: {
active: "true"
text: "Some text"
}
}
如何在不知道密钥的情况下获取文本?
我使用了 lodash(见下面我的回答),但一定有更好的方法。
我使用 lodash 并像这样获取密钥:
/*
* I get the keys of the object as array
* and take the first one.
*/
const key = _.first(_.keys(snap.val()));
然后像这样从快照中获取文本:
/*
* then I create a path to the value I want
* using the key.
*/
const text= snap.child(`${key}/text`).val();
当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
Firebase 快照具有迭代其子项的内置方法:
queueRef.orderByChild('active').equalTo('true').once('value', function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key+": "+child.val());
}
});