如何使用Firebase云功能更新Firestore文档的值

时间:2020-03-08 18:48:51

标签: javascript firebase google-cloud-firestore google-cloud-functions

我有Firestore数据库,当Firestore文档的字段发生更改时,我想触发云功能。我希望云功能可以查看发生了什么变化,并使用新数据来更新Firestore文档的另一个文件。

示例

假设图片中的文档已更改,并具有下图所示的新值

enter image description here

现在我想将accuracy的值更新为successes / attempts,即我希望精度为6/11 = 0.54

我应该在函数中写些什么?这是我到目前为止所拥有的

exports.calculateAccuracy = functions.firestore.document('/users/{userId}/wordScores')
    .onUpdate((change, context) => {

      //what to write here?

    });

额外的问题:我将消耗多少读写来更新准确性?

谢谢!

1 个答案:

答案 0 :(得分:2)

以下应该可以解决问题。请注意Cloud Firestore触发器(users/{userId}/wordScores/{scoreDocId})中的路径:它指向文档,而不是集合。在documentation中有更多信息。

exports.calculateAccuracy = functions.firestore
    .document('users/{userId}/wordScores/{scoreDocId}')
    .onUpdate((change, context) => {

        const newValue = change.after.data();
        const previousValue = change.before.data();

        if ((newValue.attempts !== previousValue.attempts) || (newValue.successes !== previousValue.successes)) {
            return change.after.ref.update({
                accuracy: newValue.successes / newValue.attempts
            });

        } else {
            return null;
        }

    });