您如何从Cloud Function访问存储在Firestore中的DocumentReference对象?

时间:2018-11-08 21:59:14

标签: javascript android firebase-cloud-messaging google-cloud-firestore google-cloud-functions

在我的Firestore数据库中,我将DocumentReferences存储给用户,以便始终使用最新的用户数据,例如用户名,个人资料图片和身份验证令牌。

我还实现了Cloud Functions来监听数据库触发器,以便我可以向那些特定用户发送有关与其帖子相关的活动的通知。

这是我遇到的麻烦,因为当我像访问所有其他数据库信息一样访问Node.js函数时,我不知道如何正确使用存储的参考对象。

以下是我的功能代码:

exports.countNameChanges = functions.firestore
.document('posts/{postId}')
.onUpdate((change, context) => {
  // Retrieve the current and previous value
  const data = change.after.data();
  const previousData = change.before.data();
  var registrationToken = '';

  var notification = '';
  var postTitle = data.statement;
  var userRef = data.userRef; //This is my `DocumentReference` object

  if (data.interactionCount > previousData.interactionCount && data.postTypeId == 2131165321) notification = 'You recieved a new comment!';
  if (data.interactionCount > previousData.interactionCount && data.postTypeId == 2131165335) notification = 'You recieved a new vote!';
  if (data.likes > previousData.likes) notification = 'You have a new post like!' ;
  if (data.dislikes > previousData.dislikes) notification = 'You have a new post dislike!' ;

  admin.firestore()
        .doc(userRef) //This is my `DocumentReference` object
        .get()
        .then(doc => {
            registrationToken = doc.data().token;

            var payload = {
               data: {
                  title: postTitle,
                  body: notification
               },
               token: registrationToken
            };

            admin.messaging().send(payload)
            .then((response) => {
               console.log('Successfully sent message:', response);
               })
            .catch((error) => {
               console.log('Error sending message:', error);
               })
        });

   });

});

我的功能日志

enter image description here

我认为DocumentReference对象将很容易使用 在Cloud Function内,因为支持将对象直接存储到Firestore中,但是我无法弄清楚。

1 个答案:

答案 0 :(得分:0)

如果userRef是DocumentReference类型的对象,则直接在其上调用get()。不要将其传递给doc()。您只应将字符串类型的对象传递给doc()

userRef.get().then(...)