给定起始ID,如何编写Couchbase N1QL查询获取链表结构所有文档?
用N1QL查询Couchbase中的链表全量文档
你的Couchbase集合中文档采用链表结构,每个文档通过nextCollection(下一个文档ID)和prevCollection(上一个文档ID)字段关联。要从起始IDdoc01出发获取整个链表的所有文档并返回为数组,可以使用N1QL的递归查询语法WITH RECURSIVE实现,具体语句如下:
WITH RECURSIVE linked_docs AS ( -- 初始步骤:获取起始文档 SELECT * FROM `your-collection-name` WHERE id = "doc01" UNION ALL -- 递归步骤:根据当前文档的nextCollection获取下一个文档,直到nextCollection为null SELECT d.* FROM linked_docs ld JOIN `your-collection-name` d ON ld.nextCollection = d.id WHERE ld.nextCollection IS NOT NULL ) -- 将所有递归结果聚合为一个数组 SELECT ARRAY_AGG(ld) AS linked_docs_array FROM linked_docs ld;
语句说明:
WITH RECURSIVE:开启递归查询,定义递归公共表表达式(CTE)linked_docs- 初始查询部分:先取出ID为
doc01的起始文档,作为递归的起点 - 递归查询部分:通过JOIN关联当前文档
nextCollection字段对应的下一个文档,直到nextCollection为null时终止递归 ARRAY_AGG():将所有查询到的文档聚合为一个数组,返回格式匹配需求
注意:请将语句中的your-collection-name替换为你实际使用的集合名称。
内容的提问来源于stack exchange,提问作者Abdalla Essam Ali
相关产品推荐
相关产品推荐

