我正在try 将FiRestore中的 map 替换为以下代码(dart /Flutter 翼):

    await FirebaseFirestore.instance.collection("test").doc("test").set({
      "abc": {"def": 123}
    }, SetOptions(merge: true));

    await FirebaseFirestore.instance.collection("test").doc("test").set({
      "abc": {"abc": 123}
    }, SetOptions(merge: true));

问题是,代码不会替换已有的映射,而只是向其添加TE键.

以下是FiRestore控制台中代码的输出:

Output

推荐答案

它自己也一直忘记这一点,但这里的逻辑是:

  • 使用合并选项设置文档将对提供的数据执行深度合并.

  • 如果要替换现有的顶级字段,请更新文档而不是设置文档.

完整的代码示例:

doc.snapshots().listen((read) {
  print(read.data());
});

print("Delete");
await doc.delete();

print("Initial set");
await doc.set({
  "abc": {"def": 123}
}, SetOptions(merge: true));

print("Second set with merge");
await doc.set({
  "abc": {"abc": 123}
}, SetOptions(merge: true));

print("Update");
await doc.update({
  "abc": { "ghi": 123 }
});

这将打印以下内容:

Delete
null

Initial set
{abc: {def: 123}}

Second set with merge
{abc: {abc: 123, def: 123}}

Update
{abc: {ghi: 123}}

有关这方面的运行示例,请参见https://zapp.run/edit/firestore-set-with-merge-2-z7fq06k28fr0

Flutter相关问答推荐

滚动时应用栏 colored颜色 更改Flutter

如何在Flutter的easy_translation包中链接嵌套的链接翻译?

如何更改ElevatedButton的 colored颜色 以按下它?

Android NFC未收到空的NFC标签

Flutter 对齐:不适用于多行文字

遇到图像路径格式问题

如何在抖动中预加载一条路由,或者即使在屏幕外也保持加载小工具?

在Flutter 中每次点击按钮时都很难调用自定义函数

将侧边菜单和底部导航栏放在同一Flutter 应用程序中

BaseInputfield和Textfield有什么不同?

不要跨同步间隔使用BuildContext

如何在Dart中允许正则表达式中有一个空格,但允许其他字符为1或更多?

如何使Flutter 边框宽度在外面而不是在里面?

有没有办法在没有收缩包装的情况下在列中使用 ListView.Builder?

如何与 PostgreSQL 和外部网站交互 flutter apk?

状况不佳 - Cubit

在 FAB 上添加表格小部件单击 FLUTTER

Flutter Web Responsiveness 效率不高

带图像封面的 ElevatedButton

如何从我的Flutter 项目中删除错误?