9

我正在从区区数据库中获取文档,并且我希望他们的 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 Stringifying 它时就像这样:

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

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

提前感谢您的任何提示。

4

4 回答 4

8

您应该能够在将 ref.id 转换为 Json 之前获得带有ref.id的 id ,我相信这是您当前正在做的情况:'_id: x.ref',所以只需将其替换为 _id: x.ref.id 应该没事的。

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

于 2020-05-26T10:47:44.733 回答
4

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

于 2020-05-28T19:51:13.487 回答
1

您可以使用该match()函数找到您需要其 id 的文档,然后id()在返回的 JSON 的“ref”属性上调用该方法。例如,假设我想在“用户”集合中获取用户的 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 打印到控制台。您当然可以根据需要将其传递给不同的查询。

于 2021-05-21T12:40:36.530 回答
1

根据此处的文档,您如何从Ref

client.query(
  q.Let(
    {
      doc: q.Get(q.Ref(q.Collection("users"), "1")),
    },
    {
      "id": q.Select(["ref", "id"], q.Var("doc")),
    }
  )
)
于 2021-11-04T18:27:16.390 回答