Как обновить оставшиеся дни всего пользователя в firestore со стороны сервера? - PullRequest
0 голосов
/ 22 января 2020

Я просто хочу знать, как мы можем обновить все оставшиеся дни всех пользователей в firestore со стороны сервера. Есть ли необходимость использовать firebase CLI и node.js.

1 Ответ

1 голос
/ 22 января 2020

Чтобы запускать периодические c обновления (ежедневно), я бы предложил функцию Firebase, которая запрашивает коллекцию и обновляет данные в соответствии с вашими потребностями. Вы можете создать функцию http, которая может быть запущена через URL (вы можете запланировать задание CRON для его запуска) или функцию pubsub, которая имеет собственный механизм планирования (для этого нужен платный план Firebase).

Пример PubSub:

export scheduledFunctionCrontab =
    functions.pubsub.schedule('5 11 * * *').onRun((context) => {
        console.log('This will be run every day at 11:05 AM UTC!');
        //query and update database collection

});

Пример http:

exports.functionName = functions.https.onRequest((req, res) => {
    //query and update database collection
});

Javascript для обновления Firestore в Node.js будет выглядеть примерно так:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var db = admin.firestore();

async function getDocuments() {
    let docRef = db.collection('<collectionName>');
    const result = await docRef.where(admin.firestore.FieldPath.documentId(), '>=', 'condition')
    .get();
    return result.docs;
}

exports.updateData = functions.pubsub.schedule('every 1 days').onRun(async context => {
    const documents = await getDocuments();
    for(i = 0; i < documents.length; i++) {
        documents[i].update({
            timestamp: firebase.firestore.FieldValue.serverTimestamp()
        });
    }
});
...