使用云功能查询Firestore中的子集合

时间:2020-05-27 10:15:24

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

我对云功能还很陌生,我正在尝试在我的应用程序中创建通知功能。通知存储在子集合中。日志中显示的错误是

TypeError:无法在读取未定义的属性“ first_name” Promise.all.then.result(/srv/index.js:29:41)。

可能是什么问题?

'use-strict'

const functions = require('firebase-functions');
const admin = require ('firebase-admin');
admin.initializeApp(functions.config().firebase);


exports.sendNotification = functions.firestore.document("Employee_Details/{user_id}/Notifications/{notification_id}")
.onWrite((change , context) =>{

  const user_id = context.params.user_id;
  const notification_id = context.params.notification_id;

  //console.log("User ID:" + user_id + "| Notification ID : " + notification_id);

  return admin.firestore().collection("Employee_Details").doc(user_id).collection("Notifications").doc(notification_id).get().then(queryResult => {

    const from_user_id = queryResult.data().from;

    const from_data = admin.firestore().collection("Employee_Details").doc(from_user_id).get();
    const to_data = admin.firestore().collection("Employee_Details").doc(user_id).get();

  //  console.log("FROM_DAT:" + from_data + "TO_DATA:" + to_data);


    return Promise.all([from_data , to_data]).then(result => {


      const from_name = result[0].data().first_name;
      const to_name =  result[1].data().first_name;

      return console.log("FROM: "+ from_name + "TO:" + to_name);


    });


  });



});

Firestore structure

Sub-collection

1 个答案:

答案 0 :(得分:1)

如果所附的屏幕截图属于您尝试检索的值,则Employee_Details中没有ID为Employee_Details.Gh82W1.Notifications.KR0CN4.from的文档。这就是result[0]未定义的原因,因为它无法检索任何内容。

您是否有理由认为自己使用的是 old 语法?对我来说似乎正确。您使用的方法与sample code for nodejs中的方法相同。我唯一要做的更改是避免每次都使用admin.firestore()。像这样:

const db = admin.firestore();
const from_data = db.collection("Employee_Details").doc(from_user_id).get();
const to_data = db.collection("Employee_Details").doc(user_id).get();

但这是个人喜好。