我如何通过创建的时间戳搜索和排序 faunadb

How can I search and sort faunadb by the created timestamp

我想从小测验中检索结果,return 首先是最新的,我看到有一个 ts - timestamp 字段记录了创建时间。请在下面查看我的查询。

await client.query(
    q.Map(
        q.Paginate(
    q.Match(q.Index("all_school_queries")),

            {size:1000}
        ),
        q.Lambda(
            "school_query",
            q.Get(q.Var("school_query"))
        )
    )
)

您当前的查询使用 'all_school_queries' 索引,我假设它只是 returns 引用。这意味着它将有 ref 值或根本没有值(因为 ref 将是默认的 return 值)。所以目前你的索引可能是这样的:

创建索引( { 名称:“all_school_queries”, 资料来源:集合('') } ) 要对这个索引进行排序,我们需要添加值(目前它是按引用排序的)。因此,为了获得(几乎)等效的索引,我们可以这样写。

CreateIndex({
      name: "all_school_queries",
      source: Collection('<yourcollection>'),
      values:   values: [
         {
           field: ["ref"]
         }
      ]
    })

值确定:

  • 索引会是什么return
  • 索引将return这些值的顺序是什么(再次通过此处引用)
  • 我们可以在这个索引上写什么范围查询,在上面的例子中我们可以在ref上写一个范围查询(当然没用)。

但是,我们可以添加任意数量的值,因此请确保我们可以按 ts

排序
CreateIndex({
  name: "all_school_queries",
  source: Collection('<yourcollection>'),
  values:   values: [
     {
       field: ["ts"]
     },
     {
       field: ["ref"]
     }
  ]
})

这会给你带来两样东西。现在您的索引将按 ts(然后按 ref)排序,您也可以在时间戳上编写范围查询。它还会更改您的索引 returns,现在它将 return 一个 ts 和一个 ref。您现在可以选择添加您想要的所有数据(如果您的数据发生变化,这会降低灵活性)或 return 将 ref 作为额外参数并使用 Map/Get 作为您已经在做的事情以获得实际目的。您只需稍微重写您的查询:

await client.query(
    q.Map(
        q.Paginate(
    q.Match(q.Index("all_school_queries_by_ts")),

            {size:1000}
        ),
        q.Lambda(
            ["ts", "ref"],       // we now have two parameters
            q.Get(q.Var("ref"))  // and only use the ref, but the result will be automatically sorted by ts
        )
    )
)

仅供参考,如果您更喜欢使用 UI 创建索引,它看起来是这样的: