从FaunaDB中反转数据

nhjlsmyf  于 2022-10-21  发布在  其他
关注(0)|答案(3)|浏览(153)

我一直在研究FQL和Fauna DB的docs索引。有没有办法颠倒查询返回的数据的顺序?
以下是我拥有的代码:

q.Map(
  q.Paginate(q.Match(q.Index("all_pages")), {
    //! Find way to change order
    size: 3
  }),
  ref => q.Get(ref)
)

docs提到了reverse标志。
有人知道怎么用吗?

ycl3bljg

ycl3bljg1#

假设您有一个集合,其中包含带有价格字段的文档,我们将其命名为...呃..。物美价廉!
让我们向集合中添加两个单据,价格分别为1和2。

[{
  "price": 1
},
{
  "price": 2
}]

Image in UI console of the documents

创建常规索引

使用以下代码片段在该价格值上创建常规范围索引:

CreateIndex({
  name: "regular-value-index",
  unique: false,
  serialized: true,
  source: Collection("priceables"),
  terms: [],
  values: [
    {
      field: ["data", "price"]
    }
  ]
})

创建倒排索引

可以有多个值(例如,综合指数),并且可以为每个值设置反转字段。要创建反向索引,请将该特定值的反向设置为TRUE。

CreateIndex({
  name: "reverse-value-index",
  unique: false,
  serialized: true,
  source: Collection("priceables"),
  terms: [],
  values: [
    {
      field: ["data", "price"],
      reverse: true
    }
  ]
})

如果您转到UI控制台并打开索引,您会注意到这些值从高到低排序。UI console, reverse index
我想让您困惑的是还不能在UI中设置反转布尔值。但是您只需转到Shell并粘贴FQL代码来创建索引:Image of the shell

v6ylcynt

v6ylcynt2#

我刚刚成功地翻转了一个Index。这些文档很有帮助,但它们没有给出实现Mapfunction的示例。秘诀是用q.Reverse Package Mapfunction

q.Reverse(
 q.Map(
  q.Paginate(q.Match(q.Index("all_pages")), {
    //! Find way to change order
    size: 3
  }),
  ref => q.Get(ref)
 )
)

这对你应该很管用!

xmjla07d

xmjla07d3#

根据布雷希特的回答,颠倒数据顺序的最佳方式是使用索引。Founa以排序的顺序存储索引项,因此当您的索引使用reverse: true时,索引中匹配的项已经以相反的顺序排序。
WΔ_的答案在技术上是正确的,但可能不是您想要的。在Paginate周围使用Reverse将反转页面中的项,但不是整个集合。假设您的集合是字母表中的字母,并且页面大小为3。如果没有Reverse,您可能会看到包含ABCDEF等的页面。如果您试图更改集合的顺序,您可能会看到ZYXWVU等。WΔ_的答案将生成CBA、1mn9o1p等。
Reverse可以在集合上操作。所以你可以得到Reverse(Match(Index("all_pages")))Paginate/Map的结果。请注意,对于大型集合,查询可能会失败,因为Reverse必须对整个集合进行操作。

相关问题