如何从 Ref in fauna 获取 ID?

How to get an ID from Ref in fauna?

我正在从 faunadb 获取文档,我希望它们的 ID 位于我发送给客户端的负载中。

这就是我获取文档和return它们的数据作为集合的方式


serverClient.query(
  q.Map(
    q.Paginate(q.Documents(q.Collection('Portfolio')), { size: 999999 }),
      q.Lambda(x => q.Get(x))
    )
  )
  .then((ret) => ret.data.map(x => ({ ...x.data, _id: x.ref })))

现在 _id 是 Ref.当我将它登录到控制台时看起来像这样:

Ref(Collection("Portfolio"), "266565241615155713")

像这样 JSON 字符串化它:

{"@ref":{"id":"266565241615155713","collection":{"@ref":{"id":"Portfolio","collection":{"@ref":{"id":"collections"}}}}}}

我基本上需要从那个 Ref 中获取 ID 266565241615155713。我怎样才能做到这一点? 我试过 x.ref['@ref'].id@ref 未定义。 The documentation这里没帮到我

提前感谢您的任何提示。

在将其转换为 Json 之前,您应该能够使用 ref.id 获取 ID,我相信您目前正在做的就是这种情况: '_id: x.ref',所以只需将其替换为 _id: x.ref.id 就可以了。

将其转换为 Json 后,您将必须执行 jsonRef.['@ref'].id

您还可以 return 一个带有 id 和扩展 ref 的数组,这样,您就不会使用 json 格式(这可能会改变在将来)。您可以实现这一目标,将您的 lambda 更新为 Lambda(x => [ Select('id', x), Get(x) ])

您可以使用match()函数找到您需要的文档id,然后在JSON[=24=的“ref”属性上调用id()方法]编辑。例如,假设我想在“用户”集合中获取用户的引用 ID,如下所示:

user = client.query(q.get(q.match(q.index("user_by_name"), "Paul")))

这将 return 一个 JSON 包含一个 Ref 对象,其键为 ["ref"],其中包含我们需要的 ID。由此我们可以使用 id() 函数检索 id,如下所示:

print(user["ref"].id())

这会将 id 打印到控制台。您当然可以根据需要将其传递到不同的查询中。

根据此处的 Doc 如何从 Ref

获取 ID
client.query(
  q.Let(
    {
      doc: q.Get(q.Ref(q.Collection("users"), "1")),
    },
    {
      "id": q.Select(["ref", "id"], q.Var("doc")),
    }
  )
)