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

FaunaDB单次调用Create搭配Merge意外生成两份文档问题求助

问题原因

该问题是FQL的执行特性导致的:FQL为声明式查询语言,默认不会缓存表达式的执行结果。你当前的Normalize函数内两次调用q.Select取值时,都会对传入的q.Create表达式重新求值,触发了两次数据库写入操作,最终生成两条完全相同的文档。

修复方案

使用q.Let将Create的执行结果绑定为临时变量,后续所有取值操作都基于该临时变量完成,即可保证Create仅执行一次:

const faunadb = require('faunadb');
const q = faunadb.query;

const Normalize = (resource) => (
  q.Let(
    { res: resource },
    q.Merge(
      q.Select(['data'], q.Var('res')),
      { id: q.Select(['ref', 'id'], q.Var('res')) },
    )
  )
);

const CreateFarm = (data) => (
  Normalize(
    q.Create(
      q.Collection('farms'),
      { data },
    ),
  )
);

内容的提问来源于stack exchange,提问作者Zac Delventhal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:48:00