我有一个 Firebase 数据库,其中有一个名为lines的集合。我正在尝试获取行记录的总数。我最初尝试过这个:
const count = firestore.collection('lines').get().then(snapshot => snapshot.docs.length);
...但这会迫使 firebase 读取所有行记录。
我想知道是否有一种更快、更便宜的方法来获取记录计数。
我试过这个:
const count = firestore.collection('lines').count();
这给了我这个对象:
{
"_query":{
"_firestore":{
"projectId":"xxx-12345"
},
"_queryOptions":{
"parentPath":{
"segments":[
]
},
"collectionId":"lines",
"converter":{
},
"allDescendants":false,
"fieldFilters":[
],
"fieldOrders":[
],
"kindless":false,
"requireConsistency":true
},
"_serializer":{
"allowUndefined":false
},
"_allowUndefined":false
},
"_aggregates":{
"count":{
}
}
}
...但我在这里看不到计数(除了
count
,但它是一个空对象)。
以尽可能少的读取次数从 Firebase 集合中获取记录计数的最佳方法是什么?
谢谢!
与所有 Firebase 查询方法一样,count 方法是异步的,并返回一个 Promise,该 Promise 在查询完成时变为已解决。 您需要等待承诺才能获得计数值。 请参阅 documentation 中的示例(假设您使用的是 Firebase Admin SDK),并注意
await
关键字的使用:
const collectionRef = db.collection('cities');
const snapshot = await collectionRef.count().get();
console.log(snapshot.data().count);
如果您更喜欢使用
then
而不是 await
,您也可以这样做,就像您显示的其他查询一样。