我想计算所有餐厅的分支机构数量。 “分支”是“餐馆”的子集合。当我尝试执行此查询时,出现错误:
rest.collection不是函数
这是我的代码。我该如何解决?
async function getBranch(){
const size = 0;
const restRef = await firebase.firestore().collection('Restaurants').get();
restRef.forEach((rest) => {
const branchRef = rest.collection('Branch').get();
size = size + branchRef.size();
})
return size;
}
答案 0 :(得分:1)
您必须提供餐厅ID才能获得子集合。因此最好参考GROUP BY
并获取所有Restaurants
branches
答案 1 :(得分:0)
您可以使用Promise.all()
(未经测试)进行以下操作。
async function getBranch(){
let size = 0;
const restQS = await firebase.firestore().collection('Restaurants').get();
const promises = [];
restQS.forEach((rest) => {
promises.push(rest.collection('Branch').get());
});
const querySnapshotsArray = await Promise.all(promises);
querySnapshotsArray.forEach(qs => {
size += qs.size; // <= Note that size is a property of the QuerySnapshot, not a method
})
return size;
}
另一种方法是,如果唯一名为Branch
的集合是Restaurantss的子集合,则用Collection group query查询所有分支文档。
const branchQS = await firebase.firestore().collectionGroup('Branch').get();
return branchQS.size;
您应注意,这意味着每次要获取branch
个文档的数量时,您都会读取所有(子)集合的所有文档,因此,成本。
因此,如果您的馆藏中有很多文档,一种更经济的方法是维护一组保存文档数量的分布式计数器。每次添加/删除文档时,都增加/减少计数器。