Return 特定用户 ID 的所有数据按 Fauna DB 中的最新日期排序

Return all data by specific userID sorted by newest date in Fauna DB

我正在尝试进行动物群查询,该查询将从特定用户检索 所有 数据,按最新创建的排序。

在他们的文档 (https://docs.fauna.com/fauna/current/tutorials/indexes/sort#multiple) 中有如何处理多个数据的步骤,您必须在值中指定,因为集合中有很多字段,有时我不知道他们的名称 我想要这样的结果

"data": [
    {
      "ref": Ref(Collection("Planets"), "267081152090604051"),
      "ts": 1590967285200000,
      "data": {
        "name": "Jupiter",
        "type": "GAS",
        "userID": "12344",
        "created": "1639665397555"
      }
    },
    {
      "ref": Ref(Collection("Planets"), "267081181884842515"),
      "ts": 1590967313610000,
      "data": {
        "name": "Saturn",
        "type": "GAS",
        "userID": "12344",
        "created": "1639665397446"

      }
    }
  ]
}

那么可以这样查询吗:

SELECT * FROM plantes WHERE userID="12233" ORDER BY created ASC

在不指定要检索哪些字段的情况下,我想要所有这些字段,而不管名称只是按 UserID 过滤并排序。

这是我创建的索引:

   CreateIndex({
      name: "get_user_planets_3",
      source: Collection("planets"),
       terms: [
        {
          field: ["data", "userID"]
        }
      ],
      values: [
        { field: ["data", "created"], reverse: true },
        { field: ["data", "name"] },
        { field: ["data", "type"] },
      ]
    })

但我不想指定字段名称我想要它们,不管名称只是按日期排序。

谢谢

为了检索所选集合的所有数据,return 索引中的 ref 字段 values 然后是 MapGet 文件。

索引如下:

CraeteIndex({
  name: "get_user_planets_3",
      source: Collection("planets"),
       terms: [
        {
          field: ["data", "userID"]
        }
      ],
      values: [
        { field: ["data", "created"], reverse: true },
        { field: ["ref"] } // <-- use this to retrieve the whole Document
      ]
})

您可以使用如下请求检索文档的所有数据:

Map(
  Paginate(Match(Index("get_user_planets_3"), "12233")),
  Lambda(
    // each Index value is passed to the mapping function
    ["created", "ref"],
    Get(Var("ref"))
  )
)

请注意,由于 Get 调用,每个文档至少需要 1 次读取操作。如果您想节省读取成本,那么您应该针对需要接收的数据优化查询。甚至还有一些方法可以让您的集合拥有多个索引,并让调用者根据需要选择哪些索引。这都是你自己的应用需要考虑的权衡。