请考虑以下图片:
我正在Node.js中编写一个云函数,并创建了一个函数,当用户在messageRoom中写入消息时会触发该函数。触发该功能时,它在messages
子集合中具有消息文档的快照。
我是否可以获取父文档的ID,例如2AelOkjccuGsfhXIcjWR
,其中包含正确的子集合?
答案 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
,则另一种解决方案包括一方面使用DocumentReference
的CollectionReference
的parent
属性,另一方面。
类似的东西:
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