【问题标题】:Trigger Cloud Function based on Firestore changes (Python)基于 Firestore 更改触发云函数 (Python)
【发布时间】:2020-01-20 17:25:53
【问题描述】:

每当 Firestore 中特定集合的任何文档发生更改(创建、修改、删除)时,我都想捕获增量并将其发布到 pubsub。

我正在 python 中尝试所有这些。

代码片段:

ref = db.collection('country').document(city_id)
ref.update(body_json)
ref.on_snapshot(callback)

def callback(col_snapshot, changes, read_time):
    for change in changes:
        if change.type.name == 'ADDED':
            print('ADDED')
        elif change.type.name == 'MODIFIED':
            print('MODIFIED')
        elif change.type.name == 'REMOVED':
            print('REMOVED')
    print('end of callback')

现在,当我在 firestore 文档中进行更改时,例如:

  1. 添加新文档 - 我将打印结果显示为 ADDED回调结束
  2. 修改现有文档 - 我的打印结果大多为 ADDED,但有时或者更确切地说,在 10 次运行中我会同时得到 ADDEDMODIFIED。然后是回调结束
  3. 删除任何文档 - 回调结束。有时(很少)REMOVED回调结束

我无法理解这种行为,也不知道如何处理这种无法打印的执行。

【问题讨论】:

  • 你看过here了吗?
  • 是的,但它在 nodejs 中
  • This 文档可能对您的情况有所帮助。这与 Dan 的结合(即使它在 NodeJS 中)可能会帮助您正确解决问题。

标签: python google-cloud-firestore google-cloud-functions


【解决方案1】:

限制是这仅适用于 Node.js,因此仅适用于 Javascript。我认为它仍然适用并且值得你研究,所以尽管你的问题是基于 Python 的,但在这里分享它是最好的选择。

我认为 Cloud Functions 在这里非常适合您。您可以设置触发器,以在您记录的每件事情上运行函数。

添加可以由 onCreate 处理。 修改后可以通过 onUpdate 处理。 已删除 - 由 onDelete 删除。

您基本上设置了如下所示的功能:

exports.updateUser = functions.firestore
    .document('users/{userId}')
    .onUpdate((change, context) => {
      // Get an object representing the document
      // e.g. {'name': 'Marie', 'age': 66}
      const newValue = change.after.data();

      // ...or the previous value before this update
      const previousValue = change.before.data();

      // access a particular field as you would any JS property
      const name = newValue.name;

      // perform desired operations ...
    });

您获得了上述示例文档的前后状态,因此您不仅可以知道它已更改,还可以知道更改了什么。

示例代码直接来自 Cloud Functions here 的文档。

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2022-01-08
    • 2019-07-14
    • 2019-02-06
    相关资源
    最近更新 更多