ALE*_*ANO 3 firebase flutter google-cloud-firestore
我有一个Firestore数据库。我的项目插件:
cloud_firestore:^ 0.7.4 firebase_storage:^ 1.0.1
这有一个带有多个文档的“邮件”集合。我需要删除邮件集中的所有文档。但是此代码失败:
Firestore.instance.collection('messages').delete();
Run Code Online (Sandbox Code Playgroud)
但是删除没有定义
正确的语法如何?
Cop*_*oad 35
迭代QueryDocumentSnapshot,获取DocumentReference并调用delete它。
var collection = FirebaseFirestore.instance.collection('collection');
var snapshots = await collection.get();
for (var doc in snapshots.docs) {
await doc.reference.delete();
}
Run Code Online (Sandbox Code Playgroud)
WriteBatch):final instance = FirebaseFirestore.instance;
final batch = instance.batch();
var collection = instance.collection('collection');
var snapshots = await collection.get();
for (var doc in snapshots.docs) {
batch.delete(doc.reference);
}
await batch.commit();
Run Code Online (Sandbox Code Playgroud)
感谢@Chris提出批量写入的想法。
如 Firestore文档中所述,目前没有原子删除集合的操作。
您需要获取所有文档,并遍历它们以删除每个文档。
firestore.collection('messages').getDocuments().then((snapshot) {
for (DocumentSnapshot doc in snapshot.documents) {
doc.reference.delete();
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,这只会删除messages集合。如果此路径中有子集合,它们将保留在 Firestore 中。该文档还有一个云函数,该函数还与一个 Callable 函数集成,该函数使用 Firebase 命令行界面来帮助处理嵌套删除。
啊。第一个答案几乎是正确的。该问题与dart中的map方法及其与Futures的工作方式有关。无论如何,尝试像这样使用for循环,您应该会很好:
firestore.collection('messages').getDocuments().then((snapshot) {
for (DocumentSnapshot ds in snapshot.documents){
ds.reference.delete();
});
});
Run Code Online (Sandbox Code Playgroud)
真的很惊讶没有人建议批量这些删除请求。
\n一批写入以原子方式完成,并且可以写入多个文档。批量写入是完全原子的,与事务不同,它们不依赖于写入的文档修改。即使设备处于离线状态,批量写入也能正常工作。
\n一个好的解决方案是这样的:
\nFuture<void> deleteAll() async {\n final collection = await FirebaseFirestore.instance\n .collection("posts")\n .get();\n\n final batch = FirebaseFirestore.instance.batch();\n\n for (final doc in collection.docs) {\n batch.delete(doc.reference);\n }\n \n return batch.commit();\n}\nRun Code Online (Sandbox Code Playgroud)\n请记住,您delete也可以与其他任务结合起来。collection如何用一组新数据替换 a 中的所有内容的示例:
Future<void> replaceAll(List<Posts> newPosts) async {\n final collection = await FirebaseFirestore.instance\n .collection("posts")\n .get();\n\n final batch = FirebaseFirestore.instance.batch();\n\n for (final doc in collection.docs) {\n batch.delete(doc.reference);\n }\n\n for (final post in posts) {\n batch.set(postRef().doc(post.id), post);\n }\n\n batch.commit();\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
6147 次 |
| 最近记录: |