【问题标题】:Trigger cloud function on sub-collections update子收藏更新触发云功能
【发布时间】:2020-12-22 10:54:44
【问题描述】:

我知道这个问题已经被问过了,但它没有帮助。 我有一个“聊天”集合,其中包含一个文档“成员”和一个子集合“消息”,我想在子集合中添加新消息时触发云功能。

这是我尝试过的,但它仅在“成员”更新时触发,并且没有关于子集合的任何信息:

exports.chatsCollectionTriggers = functions.firestore.document('/chats/{chatId}/messages/{messageId}').onUpdate(async (change, context) => {

let chatBefore = change.before.data();
let chatAfter = change.after.data();

console.log(JSON.stringify(chatBefore, null, 2));
console.log(JSON.stringify(chatAfter, null, 2));

console.log(context.params.chatId);
console.log(context.params.messageId);});

我的 Firestore 收藏:

我的问题是如何在子集合更新时触发云功能?

【问题讨论】:

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


    【解决方案1】:

    当您修改chats 集合的文档时(例如,如果您修改G162R... 文档的members 字段),您的云函数将不会被触发。

    当您修改(而不是在您创建)chats 集合中文档的 messages 子集合中的文档时,将触发您的云函数。例如,如果您更改消息文档vVwQXt....text 字段的值。


    所以,回答你的问题

    我的问题是如何在子集合上触发云功能 更新

    如果“子集合更新”是指子集合中现有文档的更新,则您的云函数是正确的。

    如果“子集合更新”是指在子集合中创建文档(可以是“子集合更新”的一种解释),您应该将触发器类型从 onUpdate() 更改为 onCreate()

    从您问题中的以下句子,即“我想在子集合中添加新消息时触发云功能”,您似乎想选择第二个情况,所以你应该如下调整你的云函数:

    exports.chatsCollectionTriggers = functions.firestore.document('/chats/{chatId}/messages/{messageId}').onCreate(async (snap, context) => {
    
        const newValue = snap.data();
    
        console.log(newValue);
    
        console.log(context.params.chatId);
        console.log(context.params.messageId);
    
        return null;   // Important, see https://firebase.google.com/docs/functions/terminate-functions
    
    })
    

    更多详情请关注doc

    【讨论】:

    • 解释得很清楚,谢谢它对我有用!
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2020-01-09
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多