Mike_Baltimore
Mike_Baltimore

Reputation: 21

Are "get" functions in Google cloud functions for firebase reading each document everytime?

I observed a huge amount of read on my firebase console and I was wondering if this might come from my "referral function".

This function works perfectly fine but I was wondering whether or not this function could end up with a crazy load of read in case of app scaling.

My question: does this function imply that every time a user comes in, it will account for a number of read equivalent to the number of users in my collection ?

Thus, as this function is an onUpdate, will it redo the job every time a document is updated ?

I would not mind some resources on the topic because I found it unclear on Firebase's website.

I hope my questions are clear!

Thank you very much!

export const onReferralInfoUpdate = functions.
firestore.document('users/{userUid}')
.onUpdate(async (change, context) => {
    const before = change.before.data();
    const after = change.after.data();
    const currentUserUid = after["uid"];

    if (before.godfather_code == after.godfather_code){
        console.log('Text did not change')
        return null
    }

    const godfatherUserSnapshot = await db.collection('users').where("referral_code", "==", after.godfather_code).get();
    const godfather = godfatherUserSnapshot.docs[0].data();
    const godfatherUid = godfather["uid"];
    
    const userRef = db.collection('users').doc(after.uid);

    const godfather_code = after.godfather_code
    
    await userRef.update({godfather_code})
    
    console.log(`the text before was >> ${before.godfather_code} << and after is ${after.godfather_code}` )

    let batch = db.batch();

    const updateGodfather = db.collection('users').doc(godfatherUid);

    batch.update(updateGodfather, {
        reward: admin.firestore.FieldValue.increment(100),
        godChildUid: admin.firestore.FieldValue.arrayUnion(currentUserUid),
    });

    return batch.commit();
    
});
    
    

Upvotes: 1

Views: 79

Answers (1)

Dharmaraj
Dharmaraj

Reputation: 50840

Yes, the where("referral_code", "==", after.godfather_code).get() will fetch all the documents matching the query every time onUpdate() function triggers and you'll be charged N reads (N = number of matched documents). The Admin SDK doesn't have any caching like Client SDKs.

Does this function imply that every time a user comes in, it will account for a number of read equivalent to the number of users in my collection ?

Not numbers of documents in the users collection, only the documents matching your query as mentioned.

Upvotes: 1

Related Questions