微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取 ORDERBY Faunadb

如何解决获取 ORDERBY Faunadb

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'
      }
    }
  ]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。