我正在尝试使用Firestore从集合文档中获取值。
这是我的代码和控制台日志:
useEffect(() => {
let totalarray = [];
firebase.firestore().collection("users").doc(uid).collection("services").get().then((snapshot) => {
snapshot.forEach((doc) => {
const obj = doc.data();
//obj.forEach((data) => totalarray.push((data)) )
console.log("------->",obj);
})
})
}, [])
这是我的控制台日志:
我的目标是获取每个文档的每个“ serviceCost”字段的值,将其求和,然后将其放在全局变量中供我使用。
答案 0 :(得分:0)
如果您只想获取Firestore文档的某些部分,则不能。您必须阅读整个文档,然后在客户端进行计算。其他方法,您可以考虑创建另一个集合,例如“总计”。该集合将由Firebase函数填充,该函数将在创建文档时调用并计算新成本,然后将其添加到集合“总计”中
答案 1 :(得分:0)
以下应该可以解决问题:
firebase.firestore().collection("users").doc(uid).collection("services").get().then((snapshot) => {
let serviceCostTotal = 0;
snapshot.forEach((doc) => {
serviceCostTotal = serviceCostTotal + parseInt(doc.data().serviceCost, 10);
})
// Do whatever you want with serviceCostTotal
});
您需要遍历查询返回的所有文档,并对字段值求和。请注意,它存储为字符串,因此您需要将其转换为数字。
我假设serviceCost
的值始终是整数。如果它们是浮点数,建议在汇总时使用Big.js之类的库。
但是请注意,使用这种方法时,每次您要计算总和时,都会为用户读取整个services
子集合,这可能会很昂贵,具体取决于该子集合中Firestore文档的数量。正如Methkal Khalawi在他的回答中所建议的,您可以在其他Firestore文档中维护一个“外部”总和。看一下Distributed Counters concept,以获取启发性的解决方案。