Получите childrenCount дочернего элемента в Firebase с помощью JavaScript

#javascript #firebase #firebase-realtime-database #google-cloud-functions

#javascript #firebase #google-облачная платформа #firebase-база данных в реальном времени #google-cloud-функции

Вопрос:

Я делал это в течение часа. Я просто хочу получить количество дочерних элементов в дочернем «успехе» в базе данных ниже. Ответы в аналогичных вопросах stackoverflow не работают. Я новичок в программировании на Javascript.

База данных До сих пор я пробовал это

 var children = firebase.database().ref('Success/').onWrite(event => {
	return event.data.ref.parent.once("value", (snapshot) => {
		const count = snapshot.numChildren();
console.log(count);

	})
})  

а также это

 var children = firebase.database().ref('Success/').onWrite(event => {
	return event.data.ref.parent.once("value", (snapshot) => {
		const count = snapshot.numChildren();
console.log(count);

	})
})  

Где я могу ошибаться.

Ответ №1:

Как объясняется в документе, вы должны использовать numChildren() метод следующим образом:

 var ref = firebase.database().ref("Success");
ref.once("value")
  .then(function(snapshot) {
    console.log(snapshot.numChildren()); 
  });
  

Если вы хотите использовать этот метод в облачной функции, вы можете сделать следующее:

 exports.children = functions.database
  .ref('/Success')
  .onWrite((change, context) => {
     console.log(change.after.numChildren());
     return null;
  });
  

Обратите внимание, что:

  1. Используется новый синтаксис для облачных функций версии > 1.0, см. https://firebase.google.com/docs/functions/beta-v1-diff?authuser=0

  2. Не забудьте вернуть обещание или значение, чтобы указать платформе, что выполнение облачной функции завершено (для получения более подробной информации по этому вопросу вы можете посмотреть 3 видеоролика о «обещаниях JavaScript» из серии видеороликов Firebase:https://firebase.google.com/docs/functions/video-series /).

Ответ №2:

 const db = getDatabase(app)
const questionsRef = ref(db, 'questions')

const mathematicalLiteracy = child(questionsRef, 'mathematicalLiteracy')

onValue(mathematicalLiteracy, (snapshot) => {
    const data = snapshot.val()
    const lenML = data.length - 1
    console.log(lenML)
})
  

Этот метод сработал для меня. Я хотел получить количество дочерних элементов mathematicalLiteracy узла в моем дереве базы данных. Если я получаю его значение с помощью .val() , оно возвращает массив, содержащий дочерние элементы этого узла и дополнительный пустой элемент. Итак, я вычел количество этого одного пустого элемента. Наконец-то я получаю необходимое мне количество детей.