问题描述
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"
},{
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"
},{
name: "Laura pereira maria",email: "lauramariapereira.23@gmail.com.br",level: "55",current_experience_to_next_level: "0"
}
] }
大家好,我做了一些研究,但我仍然没有找到任何可以帮助我的东西。 我想将“级别”字段按降序排列,但我只能从 faunadb 获得此反馈
解决方法
对于 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',email: 'lauramariapereira.23@gmail.com',level: '5',"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",Var("doc"))
)
}
}
)
)
)
)
更新level
字段后,获取排序结果的查询返回:
Map(
Paginate(
Match(Index("Users_by_level_descending"))
),ts: 1626239549120000,level: 100,current_experience_to_next_level: '70'
}
},level: 55,level: 5,current_experience_to_next_level: '0'
}
}
]
}