从子集合的父文档中获取字段

时间:2020-05-18 18:22:15

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

我正在使用Firestore创建消息应用程序

目前,我已经创建了一个函数,当用户在messageRoom中写消息时会触发该函数。每个messageRoom文档都有一个名为messages的子集合,其中包含会议室的消息。 messageRoom文档本身包含与messageRoom本身相关的数据,例如messageRoom中的用户。 messageRoom包含一个名为members的字段,其中包含有关messageRoom

的用户的信息

我想访问messageRoom文档中的数据,而不是messages子集合中的数据。目前,以下代码不起作用。错误告诉我members字段未定义。我做错了什么?

exports.sendNotification = functions
  .firestore
  .document('messageRooms/{messageRoomId}/messages/{messageId}')
  .onCreate(  
  async (snapshot) => {
    /*
    Does something with the documents in the subcollection
    */

    //Get the DocumentReference of the parent doc
    const parentDocId = snapshot.ref.parent.id;

    admin.firestore().collection('messageRooms').doc(parentDocId).get('members').get().then(doc => {
      if (doc.exists) {
         console.log("Document data:", doc.data());
      } else {
          // doc.data() will be undefined in this case
          console.log("No such document!");
      }
      return; //return added to prevent crash
   }).catch(error => {
      console.log("Error getting document:", error);
   });
  }
);

1 个答案:

答案 0 :(得分:0)

我认为问题出在这里

DocumentSnapshot

快照是DocumentReference,因此ref属性给我们parent。文档参考的属性CollectionReferenceconst parentDocId = snapshot.ref.parent.parent.id; Google Doc)。因此,您必须找到的不是父母,而是“祖父母” :)我可以说。也许尝试:

.id

但是,我不会在这里使用.doc属性只是为了在下一行的parent中获得引用。 get属性已提供参考(doc)。我认为.data().messages中的参数不会改变任何东西,因此我将使用const parentDocRef = snapshot.ref.parent.parent; parentDocRef.get().then(doc => { console.log(doc.data().members)}) 进入该字段。最后,我将使用:

{{1}}

我希望它将对您有帮助!