繁体   English   中英

如何使用 react.js 中的 WHERE 查询计算 Firebase Firestore 中集合中的文档数

[英]How To Count Number of Documents in a Collection in Firebase Firestore With a WHERE query in react.js

我想获取我的 Firebase Firestore 集合中的用户总数。 我可以通过编写这段代码轻松获得它:

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

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

    })
  }, []);

但我想要的是获得具有以下条件的用户总数:

   // 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)
      })
      

    })
  }, []);

但是上面的代码不起作用并且没有返回任何结果。

如何使用 where 查询获取 firebase firestore 中集合中的文档总数?

您已将计数操作移动一个循环中,这是不需要的。

相反,只需将条件添加到您的读取操作并保持 rest 相同:

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

请注意,读取所有用户文档只是为了确定它们的计数是一种昂贵的方法,因此我建议阅读有关聚合运算符的文档,以及 Dan 在Cloud Firestore 集合计数中对文档计数的回答

Firestore 刚上线原生 COUNT function 非常划算。 请参阅官方文档以获取更多信息。 你也可以参考这篇博客

进一步@Chaitra 的回答。

使用下面的代码将为您提供带有查询的文档计数。

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

    }
    ...}

然后在您的 HTML 模板中:

<h2>User Count: {{totalUsers}}</h2>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM