Faunadb如何对按时间戳排序的索引进行分页

时间:2020-09-01 20:20:20

标签: facebook-fql faunadb

我在动物群db上创建了一个排序索引,以便按时间戳排序,以便首先获取最新的项目,我试图一次检索100个项目,问题是当我从结果中输入after参数时,我收到的结果与初始结果相同。

这是我创建的索引

  CreateIndex({
  name: "all_school_queries",
  source: Collection('<school_queries_reversed>'),
  values:   values: [
     {
       field: ["ts", {reverse: true}]
     },
     {
       field: ["ref"]
     }
  ]
})

这就是我查询数据库的方式

    Map(
      Paginate(Match(Index("school_query_reverse")), {
        after: [ Ref(Collection("collection_name") ,'collection ref from first query')],
      }),
    
      Lambda(
        ['ts',"ref"], 
        Get(Var("ref"))
      )

)

这是第一个结果

    {
  before: [Ref(Collection("collection_name"), "275484304279077376")],
  after: [
    1598907150720000,
    Ref(Collection("school_queries"), "12345"),
    Ref(Collection("school_queries"), "12345")
  ],

***我在1598907150720000之后都使用了tiemtamp和参考文献12345。我首先尝试在控制台上确保收到正确的响应,但是从之后输入任何一个结果时,我都得到相同的结果。 / p>

1 个答案:

答案 0 :(得分:1)

我将尝试回答您的问题(我是FaunaDB的开发助理)。我不得不说,由于语法对我来说似乎没有意义,因此我对您的问题感到很困惑,因此,如果您不是您要找的答案,我深表歉意。

我很困惑的事情。

  • 索引语法错误,您将其复制到某个地方还是手动重写了?如果您将其复制到某处,则可能会显示错误,因此请告知我。索引名称与您使用的名称不匹配,因此我认为这是一个错字。
  • ,在集合名称中颠倒对我来说似乎没有意义,因为反向是在索引而不是集合上定义的。

不过没关系,我尝试重现您的问题,因为我不知道数据的外观,因此我将其简化了。 enter image description here

我使用的索引如下:

CreateIndex({
   name: "all_school_queries",
    source: Collection('school_queries'),
    values: [
     {
       field: ["ts"], 
       reverse: true
     },
     {
       field: ["ref"]
     }
  ]
})

如果我再按以下方式查询此索引:

Map(
  Paginate(Match(Index("all_school_queries")), {size: 1}),   
  Lambda(
     ['ts',"ref"], 
     Get(Var("ref"))
  )
)

我确实得到了我首先添加的最后一个元素(反向索引)

{
  after: [
    1599220462170000,
    Ref(Collection("school_queries"), "275735235372515847"),
    Ref(Collection("school_queries"), "275735235372515847")
  ],
  data: [
    {
      ref: Ref(Collection("school_queries"), "275735244842205703"),
      ts: 1599220471200000,
      data: {
        query: "bli"
      }
    }
  ]
}

,当我使用返回的after游标获取下一页时(这里我仅指定了一个元素的页面):

Map(
      Paginate(Match(Index("all_school_queries")), {size: 1, after: [
        1599220462170000,
        Ref(Collection("school_queries"), "275735235372515847"),
        Ref(Collection("school_queries"), "275735235372515847")
      ]}),
    
      Lambda(
        ['ts',"ref"], 
        Get(Var("ref"))
      )
)

我确实得到了预期的其他元素。


{
  before: [
    1599220462170000,
    Ref(Collection("school_queries"), "275735235372515847"),
    Ref(Collection("school_queries"), "275735235372515847")
  ],
  data: [
    {
      ref: Ref(Collection("school_queries"), "275735235372515847"),
      ts: 1599220462170000,
      data: {
        query: "bla"
      }
    }
  ]
}

那对你不起作用吗?