如何 select 单个项目并在 faunadb 中获取它的关系?

how to select a single item and get it's relations in faunadb?

我有两个集合,它们的数据格式如下

{
  "ref": Ref(Collection("Leads"), "267824207030650373"),
  "ts": 1591675917565000,
  "data": {
    "notes": "voicemail ",
    "source": "key-name",
    "name": "Glenn"
  }
}

{
  "ref": Ref(Collection("Sources"), "266777079541924357"),
  "ts": 1590677298970000,
  "data": {
    "key": "key-name",
    "value": "Google Ads"
  }
}

我希望能够查询 Leads 集合并能够在单个查询中检索相应的 Sources 文档

我想出了以下查询来尝试使用索引,但我无法将其获取到 运行

Let(
      {
        data: Get(Ref(Collection('Leads'), '267824207030650373'))
      },
      {
        data: Select(['data'],Var('data')),
        source: q.Lambda('data',
              Match(Index('LeadSourceByKey'), Get(Select(['source'], Var('data') )) )
            )
      }
)

有没有简单的方法来检索源文档?

您可能会更改 Leads 文档并将 Ref to Sources 文档放在源中:

{
  "ref": Ref(Collection("Leads"), "267824207030650373"),
  "ts": 1591675917565000,
  "data": {
    "notes": "voicemail ",
    "source": Ref(Collection("Sources"), "266777079541924357"),
    "name": "Glenn"
  }
}

{
  "ref": Ref(Collection("Sources"), "266777079541924357"),
  "ts": 1590677298970000,
  "data": {
    "key": "key-name",
    "value": "Google Ads"
  }
}

然后这样查询:

Let(
      {
        lead: Select(['data'],Get(Ref(Collection('Leads'), '267824207030650373'))),
        source:Select(['source'],Var('lead'))
      },
      {
        data: Var('lead'),
        source: Select(['data'],Get(Var('source')))
      }
)

您正在寻找的是我分多个步骤为您分解的以下查询:

Let(
  {
    // Get the Lead document 
    lead: Get(Ref(Collection("Leads"), "269038063157510661")),
    // Get the source key out of the lead document
    sourceKey: Select(["data", "source"], Var("lead")),
    // use the index to get the values via match 
    sourceValues: Paginate(Match(Index("LeadSourceValuesByKey"), Var("sourceKey")))
  },
  {
    lead: Var("lead"),
    sourceValues: Var("sourceValues")
  }
)

结果是:

{
  lead: {
    ref: Ref(Collection("Leads"), "269038063157510661"),
    ts: 1592833540970000,
    data: {
      notes: "voicemail ",
      source: "key-name",
      name: "Glenn"
    }
  },
  sourceValues: {
    data: [["key-name", "Google Ads"]]
  }
}

sourceValues 是一个数组,因为您在索引中指定将有两个项目 returned,键和值以及索引总是 returns 数组。因为你的 Match 可以 returned 多个值,以防它不是一对一的,所以这变成了数组的数组。

这只是一种方法,您还可以使索引 return 成为参考,并使 Map/Get 获得实际文档,如 forum.

不过,我假设您问过同样的问题 here。尽管我很高兴在 Whosebug vs slack 甚至我们自己的论坛上提问,但请不要只是 post 到处都是相同的问题而不链接到其他问题。这使得许多人花费大量时间,而问题已经在其他地方得到了回答。