Cha*_*ang 5 firebase google-cloud-firestore
我正在使用firebase的firestore,我想遍历整个集合.是否有类似的东西:
db.collection('something').forEach((doc) => {
// do something
})
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用集合引用上的get()方法简单地查询集合的所有文档.CollectionReference对象是Query的子类,因此您可以在其上调用Query方法.收集引用本身就是对其所有文档的未过滤查询.
Android:Query.get()
iOS/Swift:Query.getDocuments()
JavaScript:Query.get()
在每个平台中,此方法都是异步的,因此您必须正确处理回调.
另请参阅" 获取集合中的所有文档 "的产品文档.
如果您知道集合中没有太多文档(例如数千或数百万),那么您可以按照collectionRef.get()此处得票最高的答案中的描述以及 Firebase文档中的解释进行使用。
然而,在许多情况下,集合可能包含大量文档,您无法立即“获取”这些文档,因为程序的内存使用量将会激增。在这些情况下,您需要实现不同的遍历逻辑,以批量遍历整个集合。您还需要确保您不会错过任何文档或多次处理其中任何文档。
\n这就是我们在Proficient AI上编写Firewalk的原因。Firewalk 是一个开源 Node.js 库,可引导您完成给定的集合/可遍历。它是一个非常轻量、健壮、类型良好且文档齐全的库,为您提供可配置的遍历器对象,引导您浏览给定的集合。
\n您可以在此处找到 Github 存储库,在此处找到文档。另外,这里有一个简短的片段,向您展示如何使用Firewalkusers遍历集合。
import { createTraverser } from \'firewalk\';\n\nconst usersCollection = firestore().collection(\'users\');\nconst traverser = createTraverser(usersCollection);\n\nconst { batchCount, docCount } = await traverser.traverse(async (batchDocs, batchIndex) => {\n const batchSize = batchDocs.length;\n await Promise.all(\n batchDocs.map(async (doc) => {\n const { email, firstName } = doc.data();\n await sendEmail({ to: email, content: `Hello ${firstName}!` });\n })\n );\n console.log(`Batch ${batchIndex} done! We emailed ${batchSize} users in this batch.`);\n});\n\nconsole.log(`Traversal done! We emailed ${docCount} users in ${batchCount} batches!`);\nRun Code Online (Sandbox Code Playgroud)\n
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());
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8858 次 |
| 最近记录: |