создание списка лидеров в FireStore - PullRequest
0 голосов
/ 30 октября 2018

У меня была функция, которая успешно опрашивала дочерний узел с именем / mobile_user и ранжировала 10 лучших пользователей по значению "earned_points", а также записала эти 10 лучших пользователей в новый узел с именем / leaderboard, который находится на том же уровне. as / mobile_user

Я перешел на firestore, потому что хочу использовать мощные запросы и не могу изменить синтаксис с firebase rtdb на firestore

Моя функция выглядит так

 exports.leaderboardUpdate2 = functions.https.onRequest((req, res) =>{
  const updates = [];
  const leaderboard = {};

  const ref = admin.firestore().collection('mobile_user');
  const leaderboardRef = admin.firestore().collection('/leaderboard');

  return ref.orderBy("earned_points").limit(10).get().then(dataSnapshot => {
      let i = 0;
      dataSnapshot.forEach(function(childSnapshot) {
        const r = dataSnapshot.data.count() - i;
        console.log(r)
        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);
    }).then(() => {
      res.status(200).send("Mobile user ranks updated");
    }).catch((err) => {
      console.error(err);
      res.status(500).send("Error updating ranks.");
    });
});

Я застрял в течение нескольких часов, пытаясь получить счетчик снимка, а затем итеративно добавляя ранг.

Любая помощь или совет приветствуется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...