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



我想获得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中集合中的文档总数?

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

相反,只需将条件添加到您的读取操作中,并保持其余条件不变:

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

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

Firestore刚刚推出了一个非常经济高效的原生COUNT函数。有关更多信息,请参阅官方文件。你也可以参考这个博客。

进一步了解@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>

最新更新