Получение количества элементов снимка

Я пытаюсь ранжировать своих пользователей на основе значения, для этого я пытаюсь выполнить итерацию по списку после упорядочивания по значению под названием «Earned_points», однако я получаю сообщение об ошибке dataSnapshot.numChildren is not a function.

Вот как выглядит мой код

return rankref.orderBy("earned_points").limit(10).get().then(function(dataSnapshot) {
      let i = 0;
      console.info(dataSnapshot)
      dataSnapshot.forEach(function(childSnapshot) {
        const r = dataSnapshot.numChildren() - i;
        console.info(childSnapshot)
        updates.push(childSnapshot.ref.update({rank: r}));
        leaderboard[childSnapshot.key] = Object.assign(childSnapshot.val(), {rank: r});
        i++;
      });

      updates.push(leaderboardRef.set(leaderboard));
      return Promise.all(updates);

Это должно добавить ранг к каждому дочернему снимку, а затем создать новый узел, называемый таблицей лидеров.

Есть идеи, почему я получаю это? я только что переключился с базы данных в реальном времени на firestore и не знаю, что происходит

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
632
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

i just switched from realtime database to firestore and don't know what's going on

В firestore нет DataSnapshot, firestore использует концепции коллекций и документов.

Метод numChildren() находится внутри класса DataSnapshot.

Метод get() находится внутри класса CollectionReference и возвращает QuerySnapshot, поэтому вы получаете ошибку dataSnapshot.numChildren is not a function.

Пример получения всех документов в коллекции:

db.collection("cities").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
    // doc.data() is never undefined for query doc snapshots
    console.info(doc.id, " => ", doc.data());
   });
});

Проверь это:

https://firebase.google.com/docs/firestore/query-data/get-data

Другие вопросы по теме