我想从测验中检索结果并首先返回最新的测验,我看到有一个ts-时间戳字段,用于记录创建的时间。请在下面查看我的查询。
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"))
)
)
)
答案 0 :(得分:0)
您当前的查询使用一个'all_school_queries'索引,我假设它只是返回引用。这意味着它将在值中包含 ref ,或者根本不包含任何值(因为ref将是默认返回值)。因此,当前您的索引可能看起来像这样:
CreateIndex( { 名称:“ all_school_queries”, 资料来源:Collection('') } ) 要对该索引进行排序,我们需要添加值(当前按引用排序)。因此,要获得(几乎)等效的索引,我们可以编写此代码。
CreateIndex({
name: "all_school_queries",
source: Collection('<yourcollection>'),
values: values: [
{
field: ["ref"]
}
]
})
值决定:
但是我们可以添加任意多个值,因此请确保可以按ts排序
CreateIndex({
name: "all_school_queries",
source: Collection('<yourcollection>'),
values: values: [
{
field: ["ts"]
},
{
field: ["ref"]
}
]
})
这为您买了两件事。现在,您的索引将按ts(然后按ref)排序,并且您也可以在时间戳上编写范围查询。它还会更改索引返回的内容,现在将返回ts和ref。现在,您可以选择添加所需的所有数据(如果数据更改,灵活性会降低),或者将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创建索引,则外观如下: