在Firestore中创建排行榜

时间:2018-10-29 22:42:03

标签: javascript firebase google-cloud-firestore

我有一个函数可以成功查询一个名为/ mobile_user的子节点,并根据“ earned_points”上的值对前十名用户进行排名,并将这些前十名用户写入到名为/ leaderboard的同一级别的新节点中作为/ 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.");
    });
});

我被困了几个小时,试图获取快照的数量,然后反复添加排名。

感谢任何帮助或建议

0 个答案:

没有答案