如何 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 到处都是相同的问题而不链接到其他问题。这使得许多人花费大量时间,而问题已经在其他地方得到了回答。
我有两个集合,它们的数据格式如下
{
"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 到处都是相同的问题而不链接到其他问题。这使得许多人花费大量时间,而问题已经在其他地方得到了回答。