1

我在动物区系数据库上创建了一个索引以按时间戳排序,以便首先获取最新的项目,并且我试图一次检索 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和参考,12345. 我首先尝试了控制台以确保我可以获得正确的响应,但是在输入之后的任一结果后,我得到了相同的结果。

4

1 回答 1

4

我将尝试回答您的问题(我是 FaunaDB 的开发人员)。我不得不说,由于语法对我来说似乎没有意义,我对你的问题感到很困惑,所以如果这不是你正在寻找的答案,我深表歉意。

我感到困惑的事情。

  • 索引语法错误,您是在某处复制还是手动重写?如果您将它复制到某个地方,那么我们可能会错误地显示它,所以如果是这种情况,请告诉我。索引名称与您使用的名称不匹配,因此我认为这是一个错字。
  • <school_queries_reversed>,集合名称中的 reversed 对我来说似乎没有意义,因为 reverse 是在索引上定义的,而不是在集合上。

不过没关系,我试图重现您的问题,因为我不知道数据看起来如何,所以我保持简单。 在此处输入图像描述

我使用的索引如下所示:

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

当我使用返回的光标后获取下一页时(我在这里只指定了一个元素的页面):

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

那不适合你吗?

于 2020-09-04T12:07:18.887 回答