更新 Firestore 中 Array 的 Map 数据 - Flutter

Posted

技术标签:

【中文标题】更新 Firestore 中 Array 的 Map 数据 - Flutter【英文标题】:Update the Map data of an Array inside Firestore - Flutter 【发布时间】:2021-02-03 10:14:09 【问题描述】:

我一直在尝试创建一个由 Google 的 Firebase 提供支持的演示“Schedule-App”,但我在更新 Firestore 一侧的 具有地图值的数组的特定值时遇到了一些困难.

如下图所示,我们要实现的目标onButtonPress,这个具体值有待更新。

我创建了一个数据流并通过StreamProvider 对其进行管理。

StreamProvider<DocumentSnapshot>.value(
        value: FirebaseFirestore.instance.collection('schedule').doc(FirebaseAuth.instance.currentUser.uid).snapshots(),

我正在使用以下方法更新Array的数据,但它不起作用。

  Future<void> updateUserData(int index, String title, String text, int hour, bool check) async 
    DocumentReference snapshots = FirebaseFirestore.instance.collection('schedule').doc(FirebaseAuth.instance.currentUser.uid);
    snapshots.update(
      ['standard_schedule'][index]: 'title': title, 'text': text, 'hour': hour, 'check': check
    );
  

我应该对上面的方法进行哪些更改,以便在每次按下按钮时更新布尔值?

================================================

解决方案(2020 年 10 月 24 日): Firestore 不提供在索引处更新数组元素的方法。您必须读取整个文档,修改内存中的数组,然后将整个数组写回文档。

【问题讨论】:

Firestore 不提供在索引处更新数组元素的方法。您必须读取整个文档,修改内存中的数组,然后将整个数组写回文档。 看起来,情况仍然如此。我读过的所有相关答案和文章都至少有 6 个月的历史,我不确定是否仍然如此。无论如何,谢谢你的回复。 【参考方案1】:

这是我的解决方案。

var array=['title': title, 'text': text, 'hour': hour, 'check': check];
snapshots.update('standard_schedule': FieldValue.arrayUnion(scores));

【讨论】:

【参考方案2】:

Firestore 不提供更新索引处的数组元素的方法。您必须读取整个文档,修改内存中的数组,然后将整个数组写回文档

【讨论】:

以上是关于更新 Firestore 中 Array 的 Map 数据 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

Firestore:多个“数组包含”

无法在firebase.firestore.CollectionReference中使用Array firebase.firestore.Query为什么?

SwiftUI array.isEmpty 在从 Firestore 收到数组之前不显示

FIRESTORE (7.14.3) 内部断言失败:值必须未定义或 Uint8Array

从 Firestore 数组中按键/值删除项目

如何将设置数据类型放入Firestore?