交易中删除的 Firestore 节点

Posted

技术标签:

【中文标题】交易中删除的 Firestore 节点【英文标题】:Firestore nodes deleted on transaction 【发布时间】:2020-10-24 23:34:36 【问题描述】:

当我使用下面的代码添加到文档时,只要我停留在同一屏幕上,我就可以成功地继续向数组中添加其他对象。

  void createRecord(dataMap) async 
    _user = await FirebaseAuth.instance.currentUser();
    var createTransaction = (Transaction tx) async 
      var ds = await tx.get(db
          .collection('users')
          .document(_user.uid)
          .collection("days")
          .document(DateFormat("yyyy-MM-dd").format(dataMap['day'])));
      await tx.set(ds.reference, dataMap);
    ;
    Firestore.instance.runTransaction(createTransaction);
  

离开屏幕后,在尝试添加新对象时,所有对象都会被删除。

当我从屏幕返回时,如何在不删除旧对象的情况下将新对象添加到集合中?

谢谢。

【问题讨论】:

【参考方案1】:

要向数组添加新的唯一项,您可以使用arrayUnion operator。

类似:

await tx.update(ds.reference, 
                'breakfast': FieldValue.arrayUnion(dataMap['breakfast'][0])
      );

另见:

how to add or remove item to the the existing array in firestore ? flutter firestore, add new object in array How do update array values in Flutter cloud_firestore?

【讨论】:

以上是关于交易中删除的 Firestore 节点的主要内容,如果未能解决你的问题,请参考以下文章

使用python在Firestore中运行GeoPoint

交易可以在收款时使用吗?

Firestore是否提供更多的锁定事务,比如表到表的概念?

在 Firestore 中自动创建集合

如何从firestore的路径中获取布尔值

在firestore中发布时如何附加图像