如何扩展FaunaDB查询以获取customerRef关联的文档?
扩展FaunaDB查询以关联获取客户文档
你可以通过在Lambda中嵌套Let和Get操作,提取订单中的customerRef并获取对应的客户文档,最后将客户数据合并到订单结果里。
修改后的查询语句
Map( Paginate(Match(Index("orders_by_trx"), "220704142800610948")), Lambda("orderRef", Let( { // 获取当前订单的完整文档 orderDoc: Get(Var("orderRef")), // 从订单文档中提取customerRef,再获取对应的客户文档 customerDoc: Get(Select(["data", "customerRef"], Var("orderDoc"))) }, // 合并订单文档和客户数据,把客户文档放到订单data的customer字段下 Merge( Var("orderDoc"), { data: Merge(Var("orderDoc").data, { customer: Var("customerDoc") }) } ) ) ) )
关键逻辑说明
Let用于定义临时变量,先获取订单文档,再通过订单里的customerRef拉取客户文档Select(["data", "customerRef"], Var("orderDoc"))精准定位订单数据中的客户引用Merge用来将客户数据整合到订单结果中,你可以根据需求调整合并方式:- 如果只需要客户的
data部分而非完整文档,把Var("customerDoc")改成Var("customerDoc").data即可
- 如果只需要客户的
示例返回结果(简化版)
{ data: [ { ref: Ref(Collection("orders"), "336256180042072264"), ts: 1660641327310000, data: { customerRef: Ref(Collection("customers"), "340132521031237836"), transactionObj: {...}, cart: {...}, // 新增的客户数据 customer: { ref: Ref(Collection("customers"), "340132521031237836"), ts: 1660532109876000, data: { name: "张三", email: "zhangsan@example.com" // 其他客户字段 } } } } ] }
内容的提问来源于stack exchange,提问作者CradleToCradle
相关产品推荐
相关产品推荐

