How to Implement SUM() function of SQL in cloud Firestore

前端 未结 3 1994
借酒劲吻你
借酒劲吻你 2020-12-11 16:22

I am storing scores of a user in google cloud firestore as each score a new document in the collection named as \"points\".

collection name: points

相关标签:
3条回答
  • 2020-12-11 16:49

    You can either use forEach or iterate in a for loop. This answer on stack overflow could help. Here's an example from the same:

    for (var i in querySnapshot.docs) {
        const doc = querySnapshot.docs[i]
        //do what you want to here
    }
    

    ---OR---

    you can use forEach like this

     const collRef = firebase.firestore().collection('todos');
      const query = collRef.orderBy('position');
      const items = query.get()
        .then((snapshot) => {
          let newCount = 0;
          snapshot.forEach((doc) => {
            const docRef = collRef.doc(doc.id);
            docRef.update({ position: newCount });
            newCount += 1;
          });
        });
    
    0 讨论(0)
  • 2020-12-11 16:54

    Use a cloud function which will make a url for you.

    Example:

    import { Request, Response } from 'express'
    import * as admin from 'firebase-admin'
    import * as functions from 'firebase-functions'
    
    export const getUsersCount = functions.runWith({ memory: '2GB', timeoutSeconds: 60 }).https.onRequest(async (req: Request, res: Response) => {
    
        const allUsers = await admin
        .firestore()
        .collection('users')
        .get()
        const numberOfUsers = allUsers.size;
    
    
        res.status(200).json({
            allTimeUsers: numberOfUsers,
        })
        return true;
    })
    

    Then just do Firebase deploy --only functions:getUsersCount The logs will print out the url for you. The url might take awhile to load if it's a big app.

    0 讨论(0)
  • 2020-12-11 17:02

    There are no built-in aggregation operators in Cloud Firestore.

    The naïve solution is to load the data in the client and sum it there, but that means that you (and your users) incur the cost of loading all documents for each time they need to show the sum.

    A better way is to keep a so-called running total in your database, which you update whenever a document is written to (added, modified, removed) to the "points" collection. For this you have two options: do it from the client, or do it from a trusted environment (such as Cloud Functions). The Firestore documentation on aggregation queries describes both options and shows sample code.

    0 讨论(0)
提交回复
热议问题