【发布时间】:2020-11-24 09:52:11
【问题描述】:
我正在开发一个使用 javascript 的 Web 应用程序,使用云 Firestore 作为数据库。在我的数据库中,我的集合中有大约 400 000 个文档。当我编写查询以获取快照大小时,我的网站将进入调试状态并且永远不会返回大小。
db2.collection("Products").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// console.log(doc.id, " => ", doc.data());
});
console.log("size",querySnapshot.size);
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
因此,我编写了另一个替代查询,如下所示,使用带有查询游标的分页数据。
var productfirst = db2.collection("Products").orderBy("ProductName").limit(10000);
getProducts(productfirst);
function getProducts(first){
first.get().then(function (documentSnapshots) {
// Get the last visible document
pcount = pcount + documentSnapshots.size;
console.log("products",documentSnapshots.size,pcount);
var lastVisible = documentSnapshots.docs[documentSnapshots.docs.length-1];
document.getElementById('totalProducts').textContent = pcount;
if(documentSnapshots.size == 0){
document.getElementById('totalProducts').textContent = pcount;
// document.getElementById("loadspinner").style.display = "none";
}
else {
// Construct a new query starting at this document, get the next 25 cities.
var next = db2.collection("Products").orderBy("ProductName").startAfter(lastVisible)
.limit(10000);
getProducts(next);
}
});
}
此查询返回快照大小,但获取总计数需要 5 分钟以上。还有其他更快的方法来获取 Firestore 集合大小吗?而且,我需要将这些文档设置到数据表中。
【问题讨论】:
-
正如 CRUD DS 回答的那样,这不是确定文档计数的好方法。它下载所有文档(这可能解释了为什么需要这么多时间),然后将它们全部丢弃,只返回计数。为了有效地获取文档数量,您必须将该数量存储在数据库中。见stackoverflow.com/questions/46554091/… 和firebase.google.com/docs/firestore/solutions/counters
标签: javascript html firebase google-cloud-firestore datatables