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

如何在FaunaDB中通过name字段关联users与jobs集合并合并数据

在FaunaDB中通过name关联users和jobs集合并获取合并对象

要基于name字段关联users和jobs集合,返回包含name、job、location的合并结果,可通过以下FQL查询实现:

前置准备:创建必要索引

首先需要创建两个索引,用于通过name字段快速查询两个集合的文档:

创建users集合的name索引

CreateIndex({
  name: "users_by_name",
  source: Collection("users"),
  terms: [{ field: ["data", "name"] }]
})

创建jobs集合的name索引

CreateIndex({
  name: "jobs_by_name",
  source: Collection("jobs"),
  terms: [{ field: ["data", "name"] }]
})

查询单个用户的合并数据

如果需要查询特定name的用户及其关联职位,使用以下查询:

Let(
  {
    targetName: "srinivas",
    // 获取匹配name的用户文档
    userData: Get(Match(Index("users_by_name"), Var("targetName"))),
    // 获取匹配name的职位文档
    jobData: Get(Match(Index("jobs_by_name"), Var("targetName")))
  },
  // 构造合并后的结果对象
  {
    name: Var("targetName"),
    location: Select(["data", "location"], Var("userData")),
    job: Select(["data", "Job"], Var("jobData"))
  }
)

查询所有用户的合并数据

如果需要批量关联所有用户与对应的职位,使用以下查询:

Let(
  {
    // 分页获取users集合的所有文档引用
    userRefs: Paginate(Documents(Collection("users"))),
    // 遍历每个用户引用,关联职位并构造结果
    mergedData: Map(
      Var("userRefs"),
      Lambda(
        "userRef",
        Let(
          {
            userDoc: Get(Var("userRef")),
            userName: Select(["data", "name"], Var("userDoc")),
            jobDoc: Get(Match(Index("jobs_by_name"), Var("userName")))
          },
          {
            name: Var("userName"),
            location: Select(["data", "location"], Var("userDoc")),
            job: Select(["data", "Job"], Var("jobDoc"))
          }
        )
      )
    )
  },
  Var("mergedData")
)

注意事项

  • 若name字段在集合中不唯一,Get方法会抛出错误,此时需将Get替换为Paginate来处理多个匹配结果。
  • 索引创建仅需执行一次,后续查询可直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:08:35