如何在Couchbase中将单文档数组值映射到另一文档并输出结果
问题原因
你的查询无返回结果的核心问题是:product_id不是order类型文档的顶层字段,而是嵌套在products数组内的子字段,直接用orderview.product_id = m.id作为关联条件,无法匹配到任何有效数据。
正确实现方案
根据你需要增强order文档、关联product名称的需求,提供两种常用实现:
方案1:保留原order结构,products数组内嵌关联后的名称
该方案输出的结构和原order文档一致,仅给products数组的每个元素追加name字段:
SELECT orderview.order_id, orderview.type, ARRAY { "product_id": l.product_id, "qty": l.qty, "name": (SELECT RAW m.name FROM `Orders` m WHERE m.type = "product" AND m.id = l.product_id LIMIT 1)[0] } FOR l IN orderview.products END AS product_view FROM `Orders` orderview WHERE orderview.type = "order";
方案2:拆分数组为单行数据
如果需要每个订单商品对应一行结果,可以用UNNEST展开数组后再关联:
SELECT orderview.order_id, l.product_id, l.qty, m.name FROM `Orders` orderview UNNEST orderview.products l INNER JOIN `Orders` m ON l.product_id = m.id WHERE orderview.type = "order" AND m.type = "product";
如果你需要筛选特定商品(比如你示例中输出的id为2的product),可以在WHERE条件中追加l.product_id = "2"即可得到你贴出的预期输出。
性能优化建议
数据量较大时建议创建以下索引提升查询效率:
- 订单类型过滤索引:
CREATE INDEX idx_order_type ONOrders(type) WHERE type = "order" - 商品关联查询索引:
CREATE INDEX idx_product_id_name ONOrders(id, name) WHERE type = "product"
内容的提问来源于stack exchange,提问作者Prasad
相关产品推荐
相关产品推荐

