【问题标题】:Get ORDERBY Faunadb获取 ORDERBY Faunadb
【发布时间】:2021-09-23 00:24:36
【问题描述】:
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",
  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"
}

] }

大家好,我做了一些研究,但仍然没有找到任何可以帮助我的东西。 我想把“级别”字段按降序排列,但我只能从动物数据库得到这个反馈

【问题讨论】:

    标签: faunadb


    【解决方案1】:

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

    【讨论】:

    • 嗨,我也试过这样,但我希望它从高到低排列。 100, 80, 55, 5 等等……我查看了动物群文件,但在这个结果中没有找到任何带有字符串的内容,并且可以按字母顺序排列它们。我将尝试使用 javascript 中的“sort()”来处理这些数据,非常感谢
    • 第二组结果按降序排列。这不是你要求的吗?在 firat 结果中,请注意 level 字段的值用引号引起来。在第二个结果中,请注意 level 字段的值没有引号。第一个是字符串,第二个是数字。这种类型差异会影响这些值的排序方式。
    • 哦,我明白了,非常感谢,很抱歉我只看到了第一个结果
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2019-01-30
    • 2019-01-29
    • 2021-02-01
    • 2021-10-26
    • 2021-12-24
    • 2020-06-02
    相关资源
    最近更新 更多