You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebase云函数中解析用户评分数据并计算平均分?

Firestore云函数:解析评分字段并计算用户平均评分

你的代码无法提取「User rating」字段,核心原因是遍历QuerySnapshot时用错了方法——每个文档快照的字段数据需要通过doc.data()方法获取,而非doc.document属性。以下是修正后的完整代码,包含评分提取与平均值计算逻辑:

exports.onUserRatingUpdate = functions.firestore
    .document("user rating/{docId}")
    .onUpdate(async (change, eventContext) => {
        const snapData = change.after.data();
        const userIdReceivingRating = snapData["User id getting rating"];

        // 获取该用户的所有评分文档
        const userRatingQuerySnapshot = await admin.firestore()
            .collection("user rating")
            .where("User id getting rating", "==", userIdReceivingRating)
            .get();

        // 收集有效评分并计算平均值
        let totalRating = 0;
        let validRatingCount = 0;

        userRatingQuerySnapshot.forEach(doc => {
            const ratingData = doc.data();
            // 提取「User rating」字段,注意字段名需与Firestore中完全一致
            const userRating = ratingData["User rating"];
            
            // 校验评分有效性,避免非数字值干扰计算
            if (typeof userRating === 'number' && !isNaN(userRating)) {
                totalRating += userRating;
                validRatingCount++;
            }
        });

        // 计算平均值,处理无有效评分的边界情况
        const averageRating = validRatingCount > 0 ? totalRating / validRatingCount : 0;

        // 可选:将平均值写入用户专属文档(示例为users集合下的对应文档)
        await admin.firestore()
            .collection("users")
            .doc(userIdReceivingRating)
            .update({ averageRating: averageRating });

        console.log(`用户${userIdReceivingRating}的新平均评分为:${averageRating}`);
    });

关键修正说明:

  • 用doc.data()获取单篇文档的字段数据,再通过键名["User rating"]提取评分值
  • 新增评分有效性校验,过滤非数字类型的无效评分
  • 补充平均值计算逻辑,同时处理无有效评分时的除以0问题
  • 可选添加将平均值写回用户文档的操作,匹配你计算新评分平均值的需求

内容的提问来源于stack exchange,提问作者user17281101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:20:35