【问题标题】:How to delete certain children of Firestore field array using Flutter如何使用 Flutter 删除 Firestore 字段数组的某些子项
【发布时间】:2020-08-28 22:48:42
【问题描述】:

我正在尝试制作一个保存运行用户日志的 Flutter 和 Firebase 健身应用程序。运行保存在 Firestore 数据库中名为“runs”的数组中。我数据库中的每个文档都代表不同用户的运行,因此“运行”数组是每个用户文档中的一个字段。我一直在尝试仅删除“运行”的特定子项,但没有运气。有谁知道怎么做?

这是我的删除功能代码:

final CollectionReference runCollection = Firestore.instance.collection('runs')

Future deleteRun(dynamic runToDelete) async {
    return await runCollection.document(uid).setData({
      'runs': FieldValue.arrayRemove([runToDelete])
    });
  }

当我运行它时,我没有收到任何错误,但数据库中没有任何反应。

我也尝试过FieldValue.delete(),但无法在不删除整个数组的情况下隔离“运行”的特定索引以删除。

这是我的 Firestore 数据库的图片:

【问题讨论】:

  • 请编辑问题以显示您尝试更改的文档的确切内容,以及runToDelete 的确切值。没有这些,我们不知道您是否做错了什么。
  • 顺便说一句,runCollection.document(uid) 将始终为非空。它实际上并没有查询数据库,它只是构建对可能存在或不存在的文档的引用。
  • @DougStevenson runToDelete 的类型为 Map<String, dynamic>,包括有关运行的数据。 'runs' 是这些地图的列表
  • 编辑问题以显示准确文档和数据。使用问题底部的编辑链接进行更改。
  • 如果可能的话,也可以从您的数据库中添加一个屏幕截图,以便我们对您的结构有更深入的了解。

标签: database firebase flutter dart google-cloud-firestore


【解决方案1】:

FieldValue.delete() 仅在您知道要删除的数组项的整个内容时才有效。它不适用于索引,也不适用于数组项的子值。

您需要做的是读取文档,修改内存中的数组,然后将修改后的数组写回文档。

【讨论】:

  • 这些操作都有据可查。如果您有特定问题,请发布一个新问题,其中包含未按您预期方式工作的代码。
【解决方案2】:
Firestore.instance.collection(collection name).document(your document id).updateData({"array name": FieldValue.arrayRemove([delete object/array])}).than((value){print("delete");}).catchError((error){print(error);});

【讨论】:

  • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
  • 在这个答案上对我有用的是'''Firestore.instance.collection(collection name).document(your document id).updateData({"array name": FieldValue.arrayRemove(delete object /array)}).then((value){print("delete");}).catchError((error){print(error);});'''
猜你喜欢
  • 2022-12-08
  • 2019-04-03
  • 2021-04-03
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2021-06-13
相关资源
最近更新 更多