如何更新 Flutter Firebase Firestore 中的映射值

Mad*_*oop 1 firebase flutter google-cloud-firestore

我的文档数据中有一个 Map 对象。像下面这样

在此输入图像描述

我必须向同一张地图添加新的用户出价,而不删除旧数据,但我使用的代码是用新值替换整个地图。关于如何实现我的目标的任何建议。

FirebaseFirestore.instance.collection('products')
.doc(widget.product.uid).update({
  'bids': {
  auth.currentUser?.email:
      currentPrice.toString()
  }
});
Run Code Online (Sandbox Code Playgroud)

Dha*_*raj 7

您需要使用点表示法来更新嵌套字段:

const userEmail = auth.currentUser?.email;
FirebaseFirestore.instance.collection('products')
.doc(widget.product.uid).update({
  'bids.${userEmail}':  currentPrice.toString()
});
Run Code Online (Sandbox Code Playgroud)

点表示法允许您更新单个嵌套字段而不覆盖其他嵌套字段。如果您更新没有点符号的嵌套字段,您将覆盖整个地图字段

参考:

  1. 更新嵌套对象中的字段
  2. FlutterFire 文档

要更新字段的.键:

var fPath = FieldPath(["bids", "user.name@domain.tld"]);
FirebaseFirestore.instance.collection('products').doc(widget.product.uid).update(fPath, currentPrice.toString());
Run Code Online (Sandbox Code Playgroud)