【问题标题】:How do I paginate a sorted index in Fauna DB?如何在 Fauna DB 中对排序索引进行分页?
【发布时间】:2020-07-24 00:53:52
【问题描述】:

我创建了一个索引来按日期对博客文章进行排序。但是,当我尝试对结果进行分页时,它会不断返回初始结果。

这是我的索引:

CreateIndex({
  name: "posts_desc",
  unique: false,
  serialized: true,
  source: Collection("posts"),
  terms: [],
  values: [
    {
      field: ["data", "sort_date"],
      reverse: true
    },
    {
      field: ["ref"]
    }
  ]
}

然后我绘制结果以通过 ref 获取每个文档。

Map(
  Paginate(Match(Index("posts_desc")), {
    after: [Ref(Collection("posts"), "Ref ID for 6th Document")],
    size: 5
  }),
  Lambda(["date", "ref"], Get(Var("ref")))
)

无论是在我的代码中还是通过 Fauna shell 运行它后,我仍然得到前 5 个结果。我已经使用原始索引(all_posts)进行了所有这些工作,但现在它似乎不起作用。此外,现在返回的 after 对象在数组的第一个位置有我的 sort_date 值,在第二个位置有 ref。我尝试将 ref 移动到索引中的第一个位置,但这破坏了排序。任何帮助表示赞赏。

【问题讨论】:

    标签: faunadb


    【解决方案1】:

    您的索引返回 [sort_date, ref] 的元组,因此您的 after 游标应该尊重这些值,您应该创建一个游标,其中第一个元素是日期,并且可以选择在第二个值上添加 ref,即:

    Paginate(Match(Index("posts_desc")), {
      after: [Date("2020-07-23")],
      size: 5
    })
    

    【讨论】:

    • 谢谢!我用你的代码试了一下,效果很好。它还与after 一起使用,作为`["2019-12-15", Ref(Collection("posts"), "RefIDString)]。你是说 ref 没有必要吗?因为我数据库中的日期只是字符串而不是唯一的,我认为它也需要参考。另外,我真的不需要索引中返回的日期,但我确实希望它根据日期排序。我只是使用参考来抓取文档。有没有办法在日期上设置索引并只返回参考?我找不到方法。谢谢你的帮助。
    • 索引游标使用字典顺序,因此仅在前一个元素相等时才比较下一个元素,依此类推。不幸的是,您需要返回索引中的日期才能对其进行排序,即使您不需要该值。
    猜你喜欢
    • 2020-10-17
    • 2020-11-05
    • 2021-08-11
    • 2020-12-20
    • 2013-06-14
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多