【问题标题】:FaunaDB: How to paginate/count all documents within the last n daysFaunaDB:如何在过去 n 天内对所有文档进行分页/计数
【发布时间】:2020-11-30 20:24:25
【问题描述】:

正如标题所说的那样。

最好使用内置的ts 时间戳,而不是data 中的附加字段。

【问题讨论】:

    标签: faunadb


    【解决方案1】:

    对于分页/计数,您可以创建如下索引:

    CreateIndex({name:"all_docs_ts",source:collection:Collection('test'),values:[{field:['ts']},{field:['ref']}]})

    然后您可以使用如下查询对文档进行分页:

    Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))]))

    如果要获取返回文档的 ref,可以使用如下查询:

    Map(Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))])),Lambda(['ts','ref'],Var('ref')))

    或获取完整文档:

    Map(Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))])),Lambda(['ts','ref'],Get(Var('ref'))))

    只需使用 Count() 函数进行计数:

    Count(Paginate(Range(Match('all_docs_ts'),[ToMicros(ToTime('2020-07-14T06:30:00Z'))],[ToMicros(ToTime('2020-07-14T18:59:59Z'))])))

    请记住,默认情况下 Paginate() 每页返回 64 个文档。您可以将批次增加到最多 100000 个文档:

    Paginate(........., {size:100000})

    如果结果集大于 size,您必须使用 afterbefore 遍历光标(您可以找到教程 @987654321 @)。

    【讨论】:

    • 杰普,那行得通。我找到了一些改进的方法,比如使用TimeSubtract,但基本结构是一样的。我必须使用 ToMicros 的事实让我想知道在数据中存储正确的 Date 类型是否会是更好的解决方案。
    • 嗨,qwtel,这很大程度上取决于您的需求。 ts 字段为每个 Fauna 文档免费提供,它存储此特定文档的创建或上次更新。您可以在数据中创建自己的字段,该字段的 Date 表示您要过滤的时间戳,但在这种情况下,您必须相应地创建索引。
    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多