2

I want to get the total number of users in my Firebase Firestore collection. I can get it easily by writing this code:

const [totalUsers, setTotalUsers] = useState(0);
  const [newUsers, setNewUsers] = useState(0);

  useEffect(() => {
    firebase.firestore().collection("Users").get().then((querySnapshot) => {
      const TotalUsers = querySnapshot.size
        setTotalUsers(TotalUsers)

    })
  }, []);

But what i want is to get the total number of users with a condition such as the following:

   // this is not working, its not showing any results back.
  useEffect(() => {
    firebase.firestore().collection("Users").where("usersID","!=","101010").get().then((querySnapshot) => {

      querySnapshot.forEach((doc) => {
        const TotalUsers = doc.size
        setTotalUsers(TotalUsers)
      })
      

    })
  }, []);

But the above code is not working and isn't returning any results.

How can I get the total number of documents in a collection in firebase firestore with a where query?

motionless570
  • 925
  • 1
  • 10
  • 26
  • I think that this article, [How to count the number of documents in a Firestore collection?](https://medium.com/firebase-tips-tricks/how-to-count-the-number-of-documents-in-a-firestore-collection-3bd0c719978f) will also help. – Alex Mamo Feb 14 '22 at 12:28

3 Answers3

5

You've moved the count operation into a loop, which is not needed.

Instead, just add the condition to your read operation and keep the rest the same:

useEffect(() => {
  firebase.firestore().collection("Users").where("usersID","!=","101010").get().then((querySnapshot) => {
    const TotalUsers = querySnapshot.size
    setTotalUsers(TotalUsers)
  })
}, []);

Note that reading all user documents just to determine their count is an expensive way to do this, so I recommend reading the documentation on aggregation operators, and Dan's answer on counting documents in Cloud Firestore collection count

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
2

Firestore has just launched a native COUNT function which is very cost-efficient. Please refer to the official documentation for more information. You can also refer to this blog.

Chaitra
  • 21
  • 2
0

Further to @Chaitra's answer.

Using this code below will give you a count of documents with a query.

import { collection, Firestore, getCountFromServer, query, where } from '@angular/fire/firestore';
    {...
  totalUsers: any;

  constructor(
  private fs: Firestore
  ){}

  onInit() {
   this.getUserCount()
  }

  async getUserCount() {

    const usersCol = collection(this.fs, `users`)

    const chkQuery = query(chkCol, where('usersID', '!=', '101010'))

    const count = await getCountFromServer(chkQuery)

    this.totalUsers = (await count).data().count

    }
    ...}

Then in your HTML template:

<h2>User Count: {{totalUsers}}</h2>
Michael Cockinos
  • 165
  • 2
  • 15