Нет способа определить, нет ли данных только с child_*
, для этого вам понадобится слушатель value
.
Для обработки нескольких потомков, которые получает событие value
, вы можете использовать:
firebase.database().ref('users').child(props.currentUser.uid).child('traits').orderByChild('field').equalTo(traitName).once('value', snapshot => {
if (snap.exists()) {
console.log('found');
snapshot.forEach(function(child) {
console.log(child.key);
})
}
else{
console.log('did not find any children');
}
})
Если вы заботитесь только о том, существует ли какой-либо ребенок и не нуждаетесь в других детях, вы можете ограничить запрос одним результатом:
firebase.database().ref('users')
.child(props.currentUser.uid).child('traits')
.orderByChild('field').equalTo(traitName)
.limitToFirst(1)
.once('value', snapshot => {
Но вам все равно понадобится вызов forEach
, поскольку API не знает, что будет только результат - или, по крайней мере, он не перегружен в этой ситуации.
Вы также можете комбинировать события child_*
и value
. Firebase будет извлекать данные только один раз за кулисами, поэтому использование нескольких прослушивателей для одних и тех же данных не наказывается.