【问题标题】:how to join collections in faunadb?如何加入动物群数据库中的收藏?
【发布时间】:2023-04-05 05:53:02
【问题描述】:

我想在我正在执行的查询中获得嵌套的ref 的值,但默认情况下响应返回其他集合的ref。考虑这个最小的例子;这里是 usercoin 模型,在 "users""coins" 集合中

user {     // ref: 123456
  name: foo
  location: bar
}
coin {     // ref: 124457
  amount: 5457
  awardedTo: Ref(Collection("users"), "123456")
}

当我运行这个查询时

q.Get(q.Ref(q.Collection("coins"), "124457"))

响应是这样的:

{
  data: {
    amount: 5457,
    awardedTo: @ref: {id: "123456", collection: {…}}
  },
  ref: @ref: {id: "124457", collection: {…}},
  ts: 1622547855525255
}

但是如何在同一个查询中获得嵌套的user 的值以得到这样的响应:

{
  data: {
    amount: 5457,
    awardedTo: {
      name: foo,
      location: bar
    }
  },
  ref: @ref: {id: "124457", collection: {…}},
  ts: 1622547855525255
}

我已阅读 Join 的文档,但在这种情况下没有帮助,并且也尝试过这种方式,但它也不起作用:

q.Let({
  coin: q.Get(q.Ref(q.Collection("coins"), '124457'))
},
  q.Union(
    q.Get(q.Select(["data","awaredTo"], q.Var("coin"))),
    q.Var("coins")
  )
)

【问题讨论】:

    标签: faunadb


    【解决方案1】:

    您可以使用此 FQL:

    Let(
      {
        coin: Select(['data'],Get(Ref(Collection("coin"), "1"))),
        user: Select(['data'],Get(Select(['awardedTo'],Var('coin'))))
      },
      Merge(Var('coin'),{awardedTo:Var('user')})
    )
    

    它从硬币中检索数据,提取用户引用并合并在一起。

    路易吉

    【讨论】:

    • 我期待一个“更高级”的解决方案,使用 Join 或其他东西,但这会解决问题。
    • 顺便问一下,您认为整个查询会花费 2 次读取操作吗?因为 2 Select 用于两个集合,或 1 读取操作用于整个查询
    • 嗨 Leonardo,实际读取文档的不是 Select(),而是 Get()。在这种情况下,是的,您必须获得 2 个不同的文档,因此需要 2 次读取。
    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多