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
相关产品推荐
相关产品推荐

