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

Fauna DB创建同类型文档引用失败:文档不唯一报错排查

创建带同类型父引用的Content文档时出现"document is not unique"错误

我尝试创建包含同类型(Content)文档引用的新Document来实现子页面结构(比如Site-1下包含Site-2、Site-3),但收到错误提示:document is not unique.。相关信息如下:

错误详情

{
  "errors": [
    {
      "position": [ "create" ],
      "code": "instance not unique",
      "description": "document is not unique."
    }
  ]
}

请求原始内容:

{"create":{"collection":"Content"},"params":{"object":{"data":{"object":{"title":"Neu 3","content":"<p>Content</p>","type":{"ref":{"collection":"ContentType"},"id":"340867692647940301"},"author":{"ref":{"collection":"User"},"id":"337159230796595404"},"date":"2022-09-05","time":"20:16","published":true,"parent":{"ref":{"collection":"Content"},"id":"341985613786906830"}}}}}}

GraphQL Schema

...
type Content {
  title: String
  content: String
  type: ContentType @relation
  author: User @relation
  date: String
  time: String
  published: Boolean
  parent: Content
  visibility: ContentVisibility @relation
  revisions: [ContentRevision] @relation
}
...

FQL代码

q.Create(q.Collection("Content"), {
  data: {
    title: title,
    content: content,
    type: q.Ref(q.Collection("ContentType"), type),
    author: q.Ref(q.Collection("User"), author),
    date: date,
    time: time,
    published: published,
    parent: q.Ref(q.Collection("Content"), parent)
  }
})

问题分析与解决步骤

这个错误的核心原因是Content集合存在唯一索引约束,当前创建的文档违反了该约束,和parent字段本身的引用逻辑无关(同类型文档引用是合法的),可能的场景及解决方法:

1. 检查集合的唯一索引配置

登录Fauna控制台,找到Content集合的索引列表,重点查看标记为「Unique」的索引:

  • 可能存在包含parent的复合唯一索引(比如title + parent的组合),导致同一个父文档下不能有重复标题的子文档
  • 也可能是其他字段(比如title单独)设置了唯一索引,当前传入的标题已存在

2. 验证冲突数据

用FQL查询现有文档,确认是否存在触发索引冲突的记录:

// 示例:检查title+parent的复合索引冲突
q.Let(
  {
    parentRef: q.Ref(q.Collection("Content"), "341985613786906830"),
    existingDocs: q.Paginate(q.Match(q.Index("your_unique_index_name"), ["Neu 3", q.Var("parentRef")]))
  },
  q.Var("existingDocs")
)

替换your_unique_index_name为实际的唯一索引名称,若返回非空结果则说明存在冲突。

3. 调整创建逻辑或索引

  • 如果是复合索引冲突:要么修改新文档的字段值(比如把标题改为Neu 3 - 副本),要么删除/修改该唯一索引(若业务不需要此约束)
  • 如果是单一字段索引冲突:检查对应字段值是否重复,调整后重新执行创建操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:15:39