在日期范围内加载 FaunaDB 文档

Load FaunaDB documents within date range

我有一个包含日期字段的膳食集合 'date'。我想查询特定日期范围内的所有膳食。我努力构建一个 FQL 查询,returns 整个文档用于用户生成的函数以在 GraphQL 查询中使用。

我有:

索引'mealsByDate':

{
  name: "mealsByDate",
  unique: false,
  serialized: true,
  source: "Meal",
  terms: [],
  values: [
    {
      field: ["data", "date"]
    },
    {
      field: ["ref"]
    }
  ]
}

查询:

Paginate(Range(Match(Index("mealsByDate")), Date("2019-12-30"), Date("2020-01-05")))

结果:

{
  "data": [
    [
      Date("2019-12-30"),
      Ref(Collection("Meal"), "253389516394463764")
    ],
    [
      Date("2019-12-30"),
      Ref(Collection("Meal"), "253389626235945490")
    ],
    [
      Date("2020-01-05"),
      Ref(Collection("Meal"), "253389653063762452")
    ]
  ]
}

如何获取结果集中refs的文档?我尝试将 Paginate 函数放入 Map 函数并应用执行 Get 的 Lambda,但我无法 select 结果中的 ref。还是整个方法有缺陷?

当您对包含多个 value 字段的索引的结果进行分页时,每个结果都是索引文档中指定值的数组。如您的查询所示,您的索引 returns 数组具有包含日期​​和文档参考的 2 个值。

当您使用 Map 包装查询时,您提供的 lambda 函数必须接受相同数量的参数,如下所示:

Map(
  Paginate(
    Range(
      Match(Index("mealsByDate")),
      Date("2019-12-30"),
      Date("2020-01-05")
    )
  ),
  Lambda(
    ["d", "r"],
    Get(Var("r"))
  )
)

对于该查询,日期字段作为参数 d 传递,而 ref 作为参数 r 传递。这使得使用 Var 函数可以轻松访问 ref。

当您使用 Map 迭代可能包含数组的其他结构时,您可以使用 Select 函数访问数组的编号元素。有关详细信息,请参阅 https://docs.fauna.com/fauna/current/api/fql/functions/select