Удаление старых документов на основе метки времени с помощью функций Firebase - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь удалить указанный c документ в коллекции на основе метки времени этого документа. Сообщения, которые устарели, и я их установил, должны быть удалены из облака при вызове сценария.

Проблема в том, что мне не удалось найти способ перебора всех документов в коллекции, чтобы я мог получить доступ к полям и сравнить Date.now() с post['expireDate].

Я использую не базу данных в реальном времени, а облако хранилища для своего проекта. Я нашел способ сделать это в БД, но не в облаке, и пробовал разные способы сделать это.

exports.removeOldPosts = functions.https.onRequest((req, res) => {
    const timeNow = Date.now();
    let postsRef = admin.firestore().collection('accesories/').listDocuments();

    postsRef.forEach(post => {
        if (post['expiredDate'] < timeNow) {
            post.delete();
        }
    })

    return res.status(200).end();
});

1 Ответ

0 голосов
/ 27 февраля 2020

Вы используете listDocuments() API , который возвращает (асинхронно) список ссылок на документы. Но ваш код:

  • не связан с тем, что вызов является асинхронным. Т.е. у вас нет обратного вызова then(), как в примере с документацией.
  • предполагает, что данные документа извлекаются, тогда как listDocuments в действительности возвращает только документ ссылки .

Чтобы это исправить, я рекомендую использовать get() API, который показан в документации Firebase при получении всех документов из коллекции . Однако вам все равно придется иметь дело с асинхронной природой, даже с этим API, поэтому я рекомендую изучить асинхронную природу облачных функций и современных веб-API. Одной из причин, по которой стоит начать, может быть превосходное сообщение в блоге Дуга Почему API Firebase асинхронный? и серия видео Learn JavaScript Promises .


Отдельно примечание: вместо чтения всех документов из базы данных, а затем определения в вашем коде, какие из них следует удалить, я бы рекомендовал , используя запрос , чтобы получить только те документы, которые вы хотите удалить. Это приводит к чтению меньшего количества документов, что экономит некоторые затраты как document reads, так и bandwidth.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...