В настоящее время я использую следующую запланированную облачную функцию для удаления любых назначений или обязанностей (документов) старше 24 часов. Функция работает нормально, и документы успешно удаляются.
Однако, ОГРОМНОЕ количество Чтений сообщается функцией. Кажется, что каждое отдельное задание или обязанность «читается», независимо от того, нужно ли это удалять или нет. Насколько я понимаю, запросы считаются чтением, если они не возвращают документ в используемом querySnapshot? Например, любые документы, которые будут удалены, будут иметь READ и DELETE.
Кто-нибудь знает, как оптимизировать это, чтобы читать только те документы, которые должны быть удалены? Или есть более простой способ удаления старых документов Cloud Firebase с помощью функции Google Cloud? Я бы подумал, что это действительно распространенная вещь.
* ОБНОВЛЕНО # 2 с collectionGroup и правильным использованием Promises (Спасибо за вашу помощь!) *
Та же проблема: при запуске функции отображается 844 операций чтения и 1 удаления. Определенно нет других источников, читающих данные. Пики возникают только сразу после запуска функции (с помощью Google Cloud Scheduler - Run Now)
Интересно, что если НЕТ документов для удаления, то НЕТ записанных чтений. Но если есть> 1 документ для удаления, существуют сотни операций чтения. В настоящее время в коллекции всего около 120 обязанностей! Кажется, что каждая обязанность читается несколько раз!?
Спасибо!
exports.scheduledCleanOldDutiesCollection = functions.pubsub.schedule('0 3 * * *')
.timeZone('America/Chicago')
.onRun((context) => {
const dateYesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000)); // 24 hours
return db.collectionGroup('duties').where('date', '<', dateYesterday).get()
.then(querySnapshot => {
const promises = [];
querySnapshot.forEach(doc => {
promises.push(doc.ref.delete());
});
return Promise.all(promises);
});
});