如何从动物群中的 Ref 获取 ID?

Posted

技术标签:

【中文标题】如何从动物群中的 Ref 获取 ID?【英文标题】:How to get an ID from Ref in fauna? 【发布时间】:2020-09-12 23:20:11 【问题描述】:

我正在从区区数据库中获取文档,并且我希望它们的 ID 包含在我发送给客户端的有效负载中。

这就是我获取文档并将其数据作为集合返回的方式


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(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 在这里没有帮助我

提前感谢任何提示。

【问题讨论】:

【参考方案1】:

在转换为 Json 之前,您应该能够使用 ref.id 获取 id,我相信这是您当前正在执行的情况:'_id: x.ref',所以只需替换使用 _id: x.ref.id 应该没问题。

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

【讨论】:

?‍♂️ duh - 应该自己尝试一下。工作精美。非常感谢!【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

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

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

【讨论】:

【参考方案4】:

根据Doc here 如何从Ref 获取 id

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

【讨论】:

以上是关于如何从动物群中的 Ref 获取 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 IOS 中的 PHPhotoLibrary 获取 ref url?

从 Cloud Functions for Firebase 中的数据库触发器获取用户 ID?

使用从数组 ref 中获取的元素评估 perl 中的相等性

如何通过mongoose中的查询ref对象获取数据

如何从 Xamarin 中的 Firebase 获取价值?

如何从 javascript 中的 URL 获取 File() 或 Blob()?