【问题标题】:Only checking if a certain property of a document has changed in cloud functions仅在云函数中检查文档的某个属性是否已更改
【发布时间】:2020-10-08 10:01:54
【问题描述】:

如果待办事项文档上的 done (bool) 属性发生更改,我希望能够只执行 if 语句,而不用担心文档的其余部分。

作为当前的问题,如果待办事项名称发生更改,即使 done 属性没有更改,也会调用此函数。

exports.watchTodos = functions.firestore.document('users/{uid}/todos/{docId}')
    .onUpdate((snap, context) => {

        const data = snap.after.data();
        const isDone = data.done;           

        if (isDone === true) {
              console.log('add points')
        }

【问题讨论】:

    标签: node.js typescript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    没有办法只对文档的特定更改触发云函数,因此您必须在函数的实现中检测到这一点。

    要检测done 字段是否已更改,您可以将其beforeafter 值与以下内容进行比较:

    if (snap.before.data().isDone != snap.after.data().isDone) {
      ...
    }
    

    【讨论】:

      【解决方案2】:

      从您的问题看来,您想在isDone 设置为true 时触发云功能。

      因此,当您在待办事项文档中将 isDone 的值设置为 true 时,另一种可能性是在特定的额外集合中创建文档。

      每次在此专用集合中创建新文档时,您都会触发云函数。

      在您的前端,您将使用批量写入同时写入两个集合(todos 子集合和“专用”集合)。您可以为在“专用”集合中创建的文档分配与用户或待办事项文档相同的 ID。这样,在 onCreate Cloud 函数中,您就知道哪个用户或待办事项文档触发了文档创建(以及 CF 执行)。

      【讨论】:

        猜你喜欢
        • 2013-06-14
        • 2016-10-31
        • 1970-01-01
        • 1970-01-01
        • 2018-09-13
        • 1970-01-01
        • 2020-11-18
        • 2019-10-12
        • 2018-11-10
        相关资源
        最近更新 更多