我如何通过创建的时间戳搜索和排序 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 创建索引,它看起来是这样的:
我想从小测验中检索结果,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 创建索引,它看起来是这样的: