Я хочу выполнить задание cron, чтобы удалить прошедшее событие. перед удалением документа события я хочу удалить пользователей, которые относятся к этому событию
так ...
- сначала мне нужно запросить документы о событиях, которые прошли
- получить доступ к вложенной коллекции этого события, чтобы получить идентификаторы пользователей.
- удалить идентификатор события из подкатегории пользователей "likesEvents"
- окончательно удалить этот пропущенный документ события
пользователь 1wBZMVjxS0l5ass977c4
дает подобное событию N5zH0lauf7reNlV9qFe3
Коллекция событий:
Коллекция пользователей:
проблема в том, что выполнение этого действия занимает много времени:
Выполнение функции заняло 11656 мс, завершено кодом состояния: 200
У меня есть только одно событие, которое нужно удалить, но оно занимает 11 с. Я не знаю, нормально ли это, или, может быть, у меня плохой код, как показано ниже?
вот код, который я использую:
export const cronJobDeletingPastEvents3456 = functions.https.onRequest(async (request,response) => {
try {
const db = admin.firestore()
const dateNow = new Date()
const pastEvents = await db.collection("events").where('dateTimeFinish', '<', dateNow).get()
if (pastEvents.docs.length === 0) {
response.send(" there are no events have passed recent date")
} else {
pastEvents.forEach(async snap => {
const eventID = snap.data().eventID
const likersSnapshots = await snap.ref.collection("likers").get()
const likersDocuments = likersSnapshots.docs
const likersIDs = []
likersDocuments.forEach(likersSnap => {
const userIDLikers = likersSnap.data().userID
likersIDs.push(userIDLikers)
})
const promisesDeletingLikers = []
likersIDs.forEach(likerUserId => {
const likersEventRef = db.collection('users').doc(likerUserId).collection('likedEvents').doc(eventID)
const p = likersEventRef.delete()
promisesDeletingLikers.push(p)
})
await Promise.all(promisesDeletingLikers)
await snap.ref.delete()
})
// send response
response.send("Successfully performing cron job")
}
}
catch (error) {
response.status(500).send(error)
}
})