获取子集合的父文档的ID

时间:2020-05-16 14:44:49

标签: firebase google-cloud-firestore google-cloud-functions

请考虑以下图片:

enter image description here

我正在Node.js中编写一个云函数,并创建了一个函数,当用户在messageRoom中写入消息时会触发该函数。触发该功能时,它在messages子集合中具有消息文档的快照。

我是否可以获取父文档的ID,例如2AelOkjccuGsfhXIcjWR,其中包含正确的子集合?

1 个答案:

答案 0 :(得分:1)

如果“当用户在messageRoom中写消息时”触发了函数,则文档路径应类似于messageRooms/{roomId}/messages/{messageId},而Cloud Function则应如下所示。然后,您可以使用上下文对象,只需执行context.params.roomId

exports.getParentId = functions.firestore
    .document('messageRooms/{roomId}/messages/{messageId}')
    .onCreate((snap, context) => {
        const parentDocId = context.params.roomId;
        console.log(parentDocId);
        //...
     })

如果您的Cloud Function不同,并且您不能使用context,则另一种解决方案包括一方面使用DocumentReferenceCollectionReferenceparent属性,另一方面。

类似的东西:

    const snapRef = snap.ref;   //Reference of the Document Snapshot
    const messagesCollectionRef = snapRef.parent;  //Reference of the messages collection (i.e. the parent of the Document)
    const roomRef = messagesCollectionRef.parent;  //Reference of the room doc (i.e. the parent of the messages collection)
    const roomId = roomRef.id;   //Id of the room doc