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

如何在GraphQL中变更数组类型状态并保留历史数据?

问题原因

  • 数组拼接逻辑错误:你当前编写的[winRatio, (await wins) / (await totalPlays)]逻辑,会将原本就是数组的winRatio整体作为新数组的第一个元素,生成[[旧值1, 旧值2...], 新值]的嵌套数组结构,和你Schema定义的一维[Float]类型不匹配,服务端校验时会自动过滤不符合类型要求的内容,最终仅保留最后一个合法的浮点数数值。
  • 更新逻辑为全量替换:GraphQL的基础update操作默认是直接替换字段的值,不会自动追加数组元素,你需要先拿到历史全量数据再拼接新值。

修复方案

  1. 先查询当前已存储的winRatio历史数据
  2. 使用展开运算符...把旧数组的所有元素平铺到新数组中,再追加新计算的胜率值
    正确代码示例:
// 第一步:先查询当前已存储的历史胜率数据
const oldPlayData = await API.graphql({
  query: getPlay, // 替换为你实际的查询单个Play的query
  variables: { id: yourPlayId } // 替换为你要更新的Play记录的ID
})
const oldWinRatio = oldPlayData.data.getPlay.winRatio || []

// 第二步:拼接新值后执行更新
const newWinRate = (await wins) / (await totalPlays)
await API.graphql({
  query: updatePlay,
  variables: {
    input: {
      id: yourPlayId,
      winRatio: [...oldWinRatio, newWinRate] // 展开旧数组+追加新值
    },
  },
})

可选优化

如果你使用的GraphQL服务端支持数组原子追加操作,可不用每次全量查询再回写,直接通过服务端指令完成追加,性能和并发安全性更高。

内容的提问来源于stack exchange,提问作者Tyler Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:06:04