对于 Fauna,您需要使用索引来控制结果是升序还是降序。
您没有提供您使用的提供上述文档列表的查询,因此我假设它们在 Users 集合中。
CreateIndex({
name: "Users_by_level_descending",
source: Collection("Users"),
values: [
{ field: ["data", "level"], reverse: true },
{ field: ["ref"] },
]
})
使用该索引,您可以使用此查询报告按level 降序排序的所有用户:
Map(
Paginate(
Match(Index("Users_by_level_descending"))
),
Lambda(
["level", "ref"],
Get(Var("ref"))
)
)
{
data: [
{
ref: Ref(Collection("Users"), "304066349713326592"),
ts: 1626239118210000,
data: {
name: 'Laura pereira maria',
image: 'https://avatars.githubusercontent.com/u/86892146?v=4',
email: 'lauramariapereira.23@gmail.com.br',
level: '55',
experience: '0',
challenges_completed: '0',
current_experience_to_next_level: '0'
}
},
{
ref: Ref(Collection("Users"), "304066330657554944"),
ts: 1626239100040000,
data: {
name: 'Laura pereira',
image: 'https://avatars.githubusercontent.com/u/86892146?v=4',
email: 'lauramariapereira.23@gmail.com',
level: '5',
experience: '0',
challenges_completed: '0',
current_experience_to_next_level: '0'
}
},
{
ref: Ref(Collection("Users"), "304066303135580672"),
ts: 1626239073800000,
data: {
name: 'Ivo Pereira',
image: 'https://avatars.githubusercontent.com/u/55932505?v=4',
email: 'ivojosepereira.jr@gmail.com',
level: '100',
experience: '70',
challenges_completed: '1',
current_experience_to_next_level: '70'
}
}
]
}
如您所见,顺序“更好”,但不是很好。由于数据中的level 字段是一个字符串,因此该结果涉及字符串排序(任何以1 开头的字符串都小于任何以5 开头的字符串)。
相反,如果您的数据对级别使用数值,则结果应该是您想要的。
这是一个批量更新数据的查询,最多可达到 64 个文档的默认分页限制:
Map(
Paginate(Documents(Collection("Users"))),
Lambda(
"ref",
Let(
{ doc: Get(Var("ref")) },
Update(
Var("ref"),
{
data: {
level: ToInteger(
Select(["data", "level"], Var("doc"))
)
}
}
)
)
)
)
更新level字段后,获取排序结果的查询返回:
Map(
Paginate(
Match(Index("Users_by_level_descending"))
),
Lambda(
["level", "ref"],
Get(Var("ref"))
)
)
{
data: [
{
ref: Ref(Collection("Users"), "304066303135580672"),
ts: 1626239549120000,
data: {
name: 'Ivo Pereira',
image: 'https://avatars.githubusercontent.com/u/55932505?v=4',
email: 'ivojosepereira.jr@gmail.com',
level: 100,
experience: '70',
challenges_completed: '1',
current_experience_to_next_level: '70'
}
},
{
ref: Ref(Collection("Users"), "304066349713326592"),
ts: 1626239549120000,
data: {
name: 'Laura pereira maria',
image: 'https://avatars.githubusercontent.com/u/86892146?v=4',
email: 'lauramariapereira.23@gmail.com.br',
level: 55,
experience: '0',
challenges_completed: '0',
current_experience_to_next_level: '0'
}
},
{
ref: Ref(Collection("Users"), "304066330657554944"),
ts: 1626239549120000,
data: {
name: 'Laura pereira',
image: 'https://avatars.githubusercontent.com/u/86892146?v=4',
email: 'lauramariapereira.23@gmail.com',
level: 5,
experience: '0',
challenges_completed: '0',
current_experience_to_next_level: '0'
}
}
]
}