【问题标题】:Can I use a cloud Function to create a new document for each user simultaneously?我可以使用云功能同时为每个用户创建一个新文档吗?
【发布时间】:2021-01-25 12:26:08
【问题描述】:

我正在尝试在每天的特定时间向所有用户发送个性化推送通知。我发送这些的方法是:

Google Cloud Scheduler > Cloud Pub/Sub > Cloud Function > Cloud Messanging > 推送通知

这适用于一般消息,但我想个性化它们 - 这意味着我需要访问特定用户的子集合中的数据,例如 users/userID/products/product1

正如here 所述,无法使用 Pub/Sub 触发器直接获取用户 ID - 所以我要做的是创建第二个函数,该函数将触发为每个用户创建的通用文档,然后将其用作个性化通知的触发器:

Cloud Scheduler > Cloud Pub/Sub > 第一个函数为每个用户创建文档 > 第二个函数触发个性化推送通知

我遇到的问题是我无法确定如何使用函数为每个用户创建通用文档,我已经尝试过:

exports.addNotificationsDocumentFunction = functions
.pubsub
.topic('notificationDocuments')
.onPublish((message, context) => {

    console.log(message);
    console.log('The function was triggered at ', context.timestamp);
    console.log('The unique ID for the event is', context.eventId);

    var data = {
        createdAt : context.timestamp.toString
    }

    return admin.firestore()
    .collection('users')
    .doc({userID})
    .collection('userNotifications')
    .doc('latestNotification')
    .set(data)
    .catch(error => {
        console.log('Error writing document: ' + error);
        return false;
      });
});

我收到以下错误:

ReferenceError: userID is not defined
    at exports.addNotificationsDocumentFunction.functions.pubsub.topic.onPublish (/srv/index.js:51:19)
    at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:132:23)
    at /worker/worker.js:825:24
    at <anonymous>
    at process._tickDomainCallback (internal/process/next_tick.js:229:7)

是否可以使用 Google Cloud Functions 为每个用户创建一个文档?

或者,是否有更好的方法来发送每日推送通知以及来自 Firestore 的个性化数据?

【问题讨论】:

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


    【解决方案1】:

    Firestore 没有用于同时创建、更新或删除多个文档的通配符。如果你有一个用户文档列表,并且你想为每个用户做一些事情,你必须查询那个集合,迭代文档,并为每个单独的用户执行工作。所以,

    1. 查询用户集合
    2. 迭代结果集中的文档
    3. 对于每个用户文档,在其 userNotifications 子集合中创建/更新一个新文档

    【讨论】:

    • 好的,谢谢,这是有道理的。尝试迭代用户文档时出现错误,但我会提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2019-09-09
    • 2018-05-19
    • 2011-09-26
    相关资源
    最近更新 更多