You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter/Dart中Firestore用update设置浮点类型Map键的方法

解决Firestore update方法自动转换浮点格式键为整数的问题

在Flutter/Dart中操作Firestore时,使用update方法设置浮点格式的字符串键(如"40.0"、"40.5"),会被自动转换为整数键(如"40"、"5"),但set方法能保留原浮点格式的键。这是因为Firestore的Dart SDK对update的字段键做了自动类型解析,会将可转换为整数的浮点数字符串转为整数键,而set方法直接保留字符串形式的键。

解决方案:用set方法配合merge: true模拟update效果

如果需要保留浮点格式的键,同时实现update的字段合并效果(不覆盖文档中其他字段),可以使用set方法并传入SetOptions(merge: true):

final testRef = FirebaseFirestore.instance.collection("test").doc("test");
await testRef.set(
  {
    "40.0": {"aaa": "aaa", "bbb": "bbb"},
    "40.5": {"ccc": "ccc", "ddd": "ddd"},
  },
  SetOptions(merge: true),
);

这样操作后,文档中的键会保留"40.0"、"40.5"的浮点格式,同时不会覆盖文档中已有的其他字段,和update方法的合并逻辑一致。

原问题代码对比

  • 原update代码(会转换键为整数):
await testRef.update(
  {
    "40.0": {"aaa": "aaa", "bbb": "bbb"},
    "40.5": {"ccc": "ccc", "ddd": "ddd"},
  }
);

输出结果:

{"40": {"aaa": "aaa", "bbb": "bbb"}, "5": {"ccc": "ccc", "ddd": "ddd"}}
  • 使用set(merge: true)后的输出(保留浮点键):
{"40.0": {"aaa": "aaa", "bbb": "bbb"}, "40.5": {"ccc": "ccc", "ddd": "ddd"}}

内容的提问来源于stack exchange,提问作者24k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:52:44