【问题标题】:Is Firestore onCreate trigger contains the latest data or only the data submitted during creation?Firestore onCreate 触发器包含最新数据还是仅包含创建期间提交的数据?
【发布时间】:2022-01-14 08:48:09
【问题描述】:

我有一个评论系统,我需要跟踪 cmets 的数量。我正在考虑使用onCreate 触发器来跟踪创建评论时的 cmets 计数。

我知道onCreate 触发器可以被多次调用,因此,为了使函数具有幂等性,我正在研究以下实现:


functions.firestore.document('users/{userId}/comments/{commentId}').onCreate(async (snap, context) => {
  const data = snap.data()

  if (data.counted) {
    return
  }

  db.doc(`commentCounter/${userId}`).update({
    value: admin.firestore.FieldValue.increment(1)
  })
  
  snap.ref.update({ counted: true })
}

这行得通吗?主要问题是来自snap 的数据是否反映了firestore 中的当前数据,还是文档创建期间的唯一数据。感谢您的宝贵时间。

【问题讨论】:

  • onCreate 函数仅在在该特定路径上创建新文档时调用。

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


【解决方案1】:

onCreate 函数使用创建文档时创建的数据触发。如果在文档创建和云函数运行之间有更新,则它不会包含在传递给代码的快照中。

如果您希望 Cloud Functions 中的 increment 添加到自文档创建以来可能发生的任何增量之外,那么使用 increment 是正确的解决方案。

另一方面,如果您希望文档由 Cloud Function 初始化并且在此之前没有其他写入,您可能希望使用安全规则来拒绝这些早期写入,例如基于标记/然后 Cloud Function 写入的标志字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多