我正在使用firebase的firestore,我想遍历整个集合。是否有类似的东西:
db.collection('something').forEach((doc) => {
// do something
})
答案 0 :(得分:5)
是的,您可以使用集合引用上的get()方法简单地在集合中查询其所有文档。 CollectionReference对象是Query的子类,因此您可以在其上调用Query方法。收集引用本身就是对其所有文档的未过滤查询。
Android:Query.get()
iOS / Swift:Query.getDocuments()
JavaScript:Query.get()
在每个平台中,此方法都是异步的,因此您必须正确处理回调。
另请参阅" Get all documents in a collection"。
的产品文档答案 1 :(得分:4)
db.collection("cities").get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
});
答案 2 :(得分:1)
如果您知道集合中没有太多文档(例如数千或数百万),那么您可以使用 collectionRef.get()
,如此处最高投票答案中所述并在 Firebase {{3} }.
然而,在许多情况下,一个集合可能包含大量的文档,您不能一次“获取”,因为您的程序的内存使用量会爆炸式增长。在这些情况下,您需要实现不同的遍历逻辑,该逻辑将分批遍历整个集合。您还需要确保不会遗漏任何文件或多次处理任何文件。
这就是我编写 docs 的原因,这是一个开源的 Node.js 库,正好解决了这个问题。它是一个极其轻便、健壮、类型良好且文档齐全的库,可为您提供可配置的遍历器对象,引导您浏览给定的集合。
您可以找到 Github 存储库 Firecode 和文档站点 here。此外,这里有一个简短的片段,向您展示了如何使用 here 遍历 users
集合。
const usersCollection = firestore().collection('users');
const traverser = createTraverser(usersCollection);
const { batchCount, docCount } = await traverser.traverse(async (batchDocs, batchIndex) => {
const batchSize = batchDocs.length;
await Promise.all(
batchDocs.map(async (doc) => {
const { email, firstName } = doc.data();
await sendEmail({ to: email, content: `Hello ${firstName}!` });
})
);
console.log(`Batch ${batchIndex} done! We emailed ${batchSize} users in this batch.`);
});
console.log(`Traversal done! We emailed ${docCount} users in ${batchCount} batches!`);