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

Flutter如何在Firestore中实现数组的条件新增或更新操作?

解决方案

直接将FieldValue.arrayUnion与SetOptions(merge: true)搭配使用即可,无需额外做字段/文档存在性校验,Firestore会自动处理所有场景:

  • 若目标文档不存在:自动创建文档,同时生成sets数组并写入待添加元素
  • 若目标文档存在但sets字段不存在:自动新增sets数组字段并写入元素
  • 若sets数组已存在:正常执行数组追加操作,不会覆盖原有元素

示例代码如下:

await workoutDoc
    .collection("exercises")
    .doc(exerciseId)
    .set(
      {"sets": FieldValue.arrayUnion(sets)},
      SetOptions(merge: true)
    );

原方案问题说明

你之前调用set方法时传入的是完整的exercise对象,其中sets是普通数组值,merge模式下会直接覆盖现有sets字段的值。现在改为仅传入用arrayUnion包裹的sets字段操作,Firestore会识别这是数组追加指令,而非字段值替换指令。

补充说明:若你可以保证目标文档一定存在,也可以直接用原update方法,Firestore的update操作本身也支持对不存在的数组字段执行arrayUnion,会自动创建数组。只有当目标文档不存在时,update才会抛出异常,此时用上面的set+merge方案兼容性更强。

内容的提问来源于stack exchange,提问作者who-aditya-nawandar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:45:03