【问题标题】:How to delete a subcollection from firestore flutter如何从 Firestore Flutter 中删除子集合
【发布时间】:2020-03-20 16:18:42
【问题描述】:

所以我是新手,使用 firestore 存储数据。目前我需要通过我的应用程序删除已经保存在 Firestore 中的数据。我试过了

  Future<void> removeDocument(String id, String userId){
    return ref.document(userId).collection(userId).document(id).delete().whenComplete((){
      print("DELETE DONE::");
    });

  }

但它不起作用。 问题是我用 userId 来保存用户详细信息

现在我想删除数据,但即使打印消息显示在我的日志中,它也不会删除数据。 下面的方法是我如何将数据添加到 Firestore

 Future<void> addDocument(Map data, String userId){
    return ref.document(userId).collection(userId).add(data);
  }


void setupLocatorWorkout() {
  locatorWorkout.registerLazySingleton(() => Api('workout_goal'));
  locatorWorkout.registerLazySingleton(() => CRUDRemoteDataSource());
}




 Api(this.path){
    print("$path");
    ref = _db.collection(path); // this is the base collection
  }

请问我在这里做错了什么? 谢谢!!!

【问题讨论】:

  • 第一条评论,而不是答案:最好对集合使用硬编码名称,因为您无法使用客户端 SDK(例如 Flutter你正在使用的)。所以更惯用的是ref.document(userId).collection("somethingThatDescribesTheThingsInThisCollection").document(id).
  • DELETE DONE:: 是否打印?日志输出中是否有任何错误?你如何填充id?如果您对该 ID 使用硬编码值,它是否有效?
  • 我的日志中显示“DELETE DONE::”,id 来自火库“PnEMmhb8bM8QB24dbUVi”

标签: firebase flutter google-cloud-firestore


【解决方案1】:

按 UID 删除用户:

  void deleteUser(User user) async {
    await db.collection(COLLECTION_NAME)
            .document(user.uid)
            .delete()
            .then((_) {
                print('User deleted.');
            });
  }
  • 别忘了在顶部添加import 'dart:async';

【讨论】:

    【解决方案2】:

    答案是你不应该。 根据Firestore docs,您不应该这样做,因为:

    虽然可以从移动/网络客户端删除集合,但这样做会对安全性和性能产生负面影响。

    但是该链接显示了如何在某些平台上完成。

    【讨论】:

    • 我意识到我已经回答了标题的问题,但是在描述中,您似乎在删除文档时遇到了问题,这是完全不同的事情。
    猜你喜欢
    • 2021-08-27
    • 2020-11-29
    • 2021-07-29
    • 1970-01-01
    • 2020-02-03
    • 2019-02-06
    • 1970-01-01
    相关资源
    最近更新 更多